diff --git a/docs/api/assets/css/main.css b/docs/api/assets/css/main.css index c771b84..ed89d93 100644 --- a/docs/api/assets/css/main.css +++ b/docs/api/assets/css/main.css @@ -492,6 +492,8 @@ ul.tsd-descriptions > li > :last-child > :last-child > :last-child { padding-bottom: 200px; } .row { + display: -ms-flexbox; + display: flex; position: relative; margin: 0 -10px; } .row:after { @@ -585,7 +587,7 @@ ul.tsd-descriptions > li > :last-child > :last-child > :last-child { height: 17px; margin: 0 3px 2px 0; background-image: url(../images/icons.png); } - @media (-webkit-min-device-pixel-ratio: 1.5), (min-device-pixel-ratio: 1.5), (min-resolution: 144dpi) { + @media (-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 144dpi) { .tsd-kind-icon:before { background-image: url(../images/icons@2x.png); background-size: 238px 204px; } } @@ -1556,7 +1558,6 @@ pre { position: fixed !important; overflow: auto; -webkit-overflow-scrolling: touch; - overflow-scrolling: touch; z-index: 1024; top: 0 !important; bottom: 0 !important; @@ -1645,7 +1646,6 @@ html.minimal .tsd-navigation { position: fixed !important; overflow: auto; -webkit-overflow-scrolling: touch; - overflow-scrolling: touch; box-sizing: border-box; z-index: 1; left: 0; @@ -1823,11 +1823,6 @@ footer { -o-column-count: 2; column-count: 2; } } .tsd-index-panel ul.tsd-index-list li { - -webkit-column-break-inside: avoid; - -moz-column-break-inside: avoid; - -ms-column-break-inside: avoid; - -o-column-break-inside: avoid; - column-break-inside: avoid; -webkit-page-break-inside: avoid; -moz-page-break-inside: avoid; -ms-page-break-inside: avoid; @@ -1884,7 +1879,7 @@ footer { border-bottom: none; } .tsd-navigation { - padding: 0 0 0 40px; } + margin: 0 0 0 40px; } .tsd-navigation a { display: block; padding-top: 2px; @@ -1934,56 +1929,45 @@ footer { .tsd-navigation.primary li.globals + li > a { padding-top: 20px; } -.tsd-navigation.secondary ul { - transition: opacity 0.2s; } - .tsd-navigation.secondary ul li a { - padding-left: 25px; } - .tsd-navigation.secondary ul li li a { - padding-left: 45px; } - .tsd-navigation.secondary ul li li li a { - padding-left: 65px; } - .tsd-navigation.secondary ul li li li li a { - padding-left: 85px; } - .tsd-navigation.secondary ul li li li li li a { - padding-left: 105px; } - .tsd-navigation.secondary ul li li li li li li a { - padding-left: 125px; } - .tsd-navigation.secondary ul.current a { +.tsd-navigation.secondary { + max-height: calc(100vh - 1rem - 40px); + overflow: auto; + position: -webkit-sticky; + position: sticky; + top: calc(.5rem + 40px); + transition: .3s; } + .tsd-navigation.secondary.tsd-navigation--toolbar-hide { + max-height: calc(100vh - 1rem); + top: .5rem; } + .tsd-navigation.secondary ul { + transition: opacity 0.2s; } + .tsd-navigation.secondary ul li a { + padding-left: 25px; } + .tsd-navigation.secondary ul li li a { + padding-left: 45px; } + .tsd-navigation.secondary ul li li li a { + padding-left: 65px; } + .tsd-navigation.secondary ul li li li li a { + padding-left: 85px; } + .tsd-navigation.secondary ul li li li li li a { + padding-left: 105px; } + .tsd-navigation.secondary ul li li li li li li a { + padding-left: 125px; } + .tsd-navigation.secondary ul.current a { + border-left-color: #eee; } + .tsd-navigation.secondary li.focus > a, + .tsd-navigation.secondary ul.current li.focus > a { + border-left-color: #000; } + .tsd-navigation.secondary li.current { + margin-top: 20px; + margin-bottom: 20px; border-left-color: #eee; } - -.tsd-navigation.secondary li.focus > a, -.tsd-navigation.secondary ul.current li.focus > a { - border-left-color: #000; } - -.tsd-navigation.secondary li.current { - margin-top: 20px; - margin-bottom: 20px; - border-left-color: #eee; } - .tsd-navigation.secondary li.current > a { - font-weight: bold; } + .tsd-navigation.secondary li.current > a { + font-weight: bold; } @media (min-width: 901px) { .menu-sticky-wrap { - position: static; } - .no-csspositionsticky .menu-sticky-wrap.sticky { - position: fixed; } - .no-csspositionsticky .menu-sticky-wrap.sticky-current { - position: fixed; } - .no-csspositionsticky .menu-sticky-wrap.sticky-current ul.before-current, - .no-csspositionsticky .menu-sticky-wrap.sticky-current ul.after-current { - opacity: 0; } - .no-csspositionsticky .menu-sticky-wrap.sticky-bottom { - position: absolute; - top: auto !important; - left: auto !important; - bottom: 0; - right: 0; } - .csspositionsticky .menu-sticky-wrap.sticky { - position: -webkit-sticky; - position: sticky; } - .csspositionsticky .menu-sticky-wrap.sticky-current { - position: -webkit-sticky; - position: sticky; } } + position: static; } } .tsd-panel { margin: 20px 0; @@ -2204,7 +2188,7 @@ ul.tsd-type-parameters { padding: 0; } .tsd-page-toolbar { - position: absolute; + position: fixed; z-index: 1; top: 0; left: 0; @@ -2212,7 +2196,8 @@ ul.tsd-type-parameters { height: 40px; color: #333; background: #fff; - border-bottom: 1px solid #eee; } + border-bottom: 1px solid #eee; + transition: transform .3s linear; } .tsd-page-toolbar a { color: #333; text-decoration: none; } @@ -2232,6 +2217,9 @@ ul.tsd-type-parameters { .tsd-page-toolbar .table-cell:first-child { width: 100%; } +.tsd-page-toolbar--hide { + transform: translateY(-100%); } + .tsd-widget:before, .tsd-select .tsd-select-label:before, .tsd-select .tsd-select-list li:before { content: ''; display: inline-block; @@ -2242,7 +2230,7 @@ ul.tsd-type-parameters { background-repeat: no-repeat; text-indent: -1024px; vertical-align: bottom; } - @media (-webkit-min-device-pixel-ratio: 1.5), (min-device-pixel-ratio: 1.5), (min-resolution: 144dpi) { + @media (-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 144dpi) { .tsd-widget:before, .tsd-select .tsd-select-label:before, .tsd-select .tsd-select-list li:before { background-image: url(../images/widgets@2x.png); background-size: 320px 40px; } } diff --git a/docs/api/assets/js/main.js b/docs/api/assets/js/main.js index 667b269..5fe710b 100644 --- a/docs/api/assets/js/main.js +++ b/docs/api/assets/js/main.js @@ -1 +1 @@ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";function x(e){return null!=e&&e===e.window}var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0>10|55296,1023&r|56320)}function oe(){T()}var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,k="sizzle"+1*new Date,m=n.document,S=0,r=0,p=ue(),x=ue(),N=ue(),A=ue(),D=function(e,t){return e===t&&(l=!0),0},j={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){for((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;o--;)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){for(var n=e.split("|"),r=n.length;r--;)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){for(var n,r=a([],e.length,o),i=r.length;i--;)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&void 0!==e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if(void 0!==t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if(void 0!==t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];for(i=t.getElementsByName(e),r=0;o=i[r++];)if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"!==e)return o;for(;n=o[i++];)1===n.nodeType&&r.push(n);return r},b.find.CLASS=d.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);for(n=e;n=n.parentNode;)a.unshift(n);for(n=t;n=n.parentNode;)s.unshift(n);for(;a[r]===s[r];)r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"!=typeof e)return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this);if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v)for(n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return void 0!==k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;l--;)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){for(l=(t=(t||"").match(R)||[""]).length;l--;)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){for(f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;o--;)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),i=("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,r.left):(a=parseFloat(o)||0,parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{for(t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position");)e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent;e&&"static"===k.css(e,"position");)e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0":">",'"':""","'":"'","`":"`"},P=h.invert(L);h.escape=W(L),h.unescape=W(P),h.result=function(n,r,t){h.isArray(r)||(r=[r]);var e=r.length;if(!e)return h.isFunction(t)?t.call(n):t;for(var u=0;u/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};function $(n){return"\\"+U[n]}var J=/(.)^/,U={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},V=/\\|'|\r|\n|\u2028|\u2029/g;h.template=function(i,n,r){!n&&r&&(n=r),n=h.defaults({},n,h.templateSettings);var t,e=RegExp([(n.escape||J).source,(n.interpolate||J).source,(n.evaluate||J).source].join("|")+"|$","g"),o=0,a="__p+='";i.replace(e,function(n,r,t,e,u){return a+=i.slice(o,u).replace(V,$),o=u+n.length,r?a+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'":t?a+="'+\n((__t=("+t+"))==null?'':__t)+\n'":e&&(a+="';\n"+e+"\n__p+='"),n}),a+="';\n",n.variable||(a="with(obj||{}){\n"+a+"}\n"),a="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+a+"return __p;\n";try{t=new Function(n.variable||"obj","_",a)}catch(n){throw n.source=a,n}function u(n){return t.call(this,n,h)}var c=n.variable||"obj";return u.source="function("+c+"){\n"+a+"}",u},h.chain=function(n){var r=h(n);return r._chain=!0,r};function G(n,r){return n._chain?h(r).chain():r}h.mixin=function(t){return h.each(h.functions(t),function(n){var r=h[n]=t[n];h.prototype[n]=function(){var n=[this._wrapped];return u.apply(n,arguments),G(this,r.apply(h,n))}}),h},h.mixin(h),h.each(["pop","push","reverse","shift","sort","splice","unshift"],function(r){var t=e[r];h.prototype[r]=function(){var n=this._wrapped;return t.apply(n,arguments),"shift"!==r&&"splice"!==r||0!==n.length||delete n[0],G(this,n)}}),h.each(["concat","join","slice"],function(n){var r=e[n];h.prototype[n]=function(){return G(this,r.apply(this._wrapped,arguments))}}),h.prototype.value=function(){return this._wrapped},h.prototype.valueOf=h.prototype.toJSON=h.prototype.value,h.prototype.toString=function(){return String(this._wrapped)},"function"==typeof define&&define.amd&&define("underscore",[],function(){return h})}(),function(t){var e="object"==typeof self&&self.self===self&&self||"object"==typeof global&&global.global===global&&global;if("function"==typeof define&&define.amd)define(["underscore","jquery","exports"],function(i,n,r){e.Backbone=t(e,r,i,n)});else if("undefined"!=typeof exports){var n,i=require("underscore");try{n=require("jquery")}catch(r){}t(e,exports,i,n)}else e.Backbone=t(e,{},e._,e.jQuery||e.Zepto||e.ender||e.$)}(function(t,e,i,n){var r=t.Backbone,s=Array.prototype.slice;e.VERSION="1.4.0",e.$=n,e.noConflict=function(){return t.Backbone=r,this},e.emulateHTTP=!1,e.emulateJSON=!1;var h,a=e.Events={},o=/\s+/,u=function(t,e,n,r,s){var h,a=0;if(n&&"object"==typeof n){void 0!==r&&"context"in s&&void 0===s.context&&(s.context=r);for(h=i.keys(n);athis.length&&(r=this.length),r<0&&(r+=this.length+1);var g,m,s=[],a=[],o=[],h=[],u={},l=e.add,c=e.merge,f=e.remove,d=!1,v=this.comparator&&null==r&&!1!==e.sort,p=i.isString(this.comparator)?this.comparator:null;for(m=0;m=this.length)return e.QueryLexer.EOS;var t=this.str.charAt(this.pos);return this.pos+=1,t},e.QueryLexer.prototype.width=function(){return this.pos-this.start},e.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},e.QueryLexer.prototype.backup=function(){this.pos-=1},e.QueryLexer.prototype.acceptDigitRun=function(){for(var t,r;47<(r=(t=this.next()).charCodeAt(0))&&r<58;);t!=e.QueryLexer.EOS&&this.backup()},e.QueryLexer.prototype.more=function(){return this.posscrollTop;)index-=1;for(;index ul.current"),_this.$navigation=_this.$el.parents(".menu-sticky-wrap"),_this.$container=_this.$el.parents(".row"),_this.listenTo(typedoc.viewport,"resize",_this.onResize),hasPositionSticky||_this.listenTo(typedoc.viewport,"scroll",_this.onScroll),_this.onResize(typedoc.viewport.width,typedoc.viewport.height),_this}return __extends(MenuSticky,_super),MenuSticky.prototype.setState=function(state){this.state!=state&&(""!=this.state&&this.$navigation.removeClass(this.state),this.state=state,""!=this.state&&this.$navigation.addClass(this.state))},MenuSticky.prototype.onResize=function(width,height){this.stickyMode=StickyMode.None,this.setState("");var containerTop=this.$container.offset().top,containerHeight=this.$container.height()||0,bottom=containerTop+containerHeight;if(this.$navigation.height()this.stickyBottom?this.setState("sticky-bottom"):this.setState(scrollTop+20>this.stickyTop?"sticky-current":""):this.stickyMode==StickyMode.Secondary&&(scrollTop>this.stickyBottom?this.setState("sticky-bottom"):this.setState(scrollTop+20>this.stickyTop?"sticky":""))},MenuSticky}(Backbone.View);typedoc.MenuSticky=MenuSticky,typedoc.registerComponent(MenuSticky,".menu-sticky")}(typedoc||(typedoc={})),function(typedoc){var search;!function(search){var SearchLoadingState;!function(SearchLoadingState){SearchLoadingState[SearchLoadingState.Idle=0]="Idle",SearchLoadingState[SearchLoadingState.Loading=1]="Loading",SearchLoadingState[SearchLoadingState.Ready=2]="Ready",SearchLoadingState[SearchLoadingState.Failure=3]="Failure"}(SearchLoadingState||(SearchLoadingState={}));var $el=$("#tsd-search"),$field=$("#tsd-search-field"),$results=$(".results"),base=$el.attr("data-base")+"/",query="",loadingState=SearchLoadingState.Idle,hasFocus=!1,preventPress=!1,index,resultClicked=!1;function createIndex(){var builder=new lunr.Builder;builder.pipeline.add(lunr.trimmer),builder.field("name",{boost:10}),builder.field("parent"),builder.ref("id");var rows=search.data.rows,pos=0,length=rows.length;!function batch(){for(var cycles=0;cycles++<100;)if(builder.add(rows[pos]),++pos==length)return index=builder.build(),setLoadingState(SearchLoadingState.Ready);setTimeout(batch,10)}()}function loadIndex(){loadingState==SearchLoadingState.Idle&&(setTimeout(function(){loadingState==SearchLoadingState.Idle&&setLoadingState(SearchLoadingState.Loading)},500),void 0!==search.data?createIndex():$.get($el.attr("data-index")).done(function(source){eval(source),createIndex()}).fail(function(){setLoadingState(SearchLoadingState.Failure)}))}function updateResults(){if($results.empty(),loadingState==SearchLoadingState.Ready&&query){var res=index.search("*"+query+"*");0===res.length&&(res=index.search("*"+query+"~1*"));for(var i=0,c=Math.min(10,res.length);i"+match+""}),parent=row.parent||"";(parent=parent.replace(new RegExp(query,"i"),function(match){return""+match+""}))&&(name=''+parent+"."+name),$results.append('
  • '+name+"
  • ")}}}function setLoadingState(value){loadingState!=value&&($el.removeClass(SearchLoadingState[loadingState].toLowerCase()),loadingState=value,$el.addClass(SearchLoadingState[loadingState].toLowerCase()),value==SearchLoadingState.Ready&&updateResults())}function setHasFocus(value){hasFocus!=value&&(hasFocus=value,$el.toggleClass("has-focus"),value?(setQuery(""),$field.val("")):$field.val(query))}function setQuery(value){query=$.trim(value),updateResults()}function setCurrentResult(dir){var $current=$results.find(".current");if(0==$current.length)$results.find(1==dir?"li:first-child":"li:last-child").addClass("current");else{var $rel=1==dir?$current.next("li"):$current.prev("li");0<$rel.length&&($current.removeClass("current"),$rel.addClass("current"))}}function gotoCurrentResult(){var $current=$results.find(".current");0==$current.length&&($current=$results.find("li:first-child")),0<$current.length&&(window.location.href=$current.find("a").prop("href"),$field.blur())}$results.on("mousedown",function(){resultClicked=!0}).on("mouseup",function(){setHasFocus(resultClicked=!1)}),$field.on("focusin",function(){setHasFocus(!0),loadIndex()}).on("focusout",function(){resultClicked?resultClicked=!1:setTimeout(function(){return setHasFocus(!1)},100)}).on("input",function(){setQuery($.trim(($field.val()||"").toString()))}).on("keydown",function(e){13==e.keyCode||27==e.keyCode||38==e.keyCode||40==e.keyCode?(preventPress=!0,e.preventDefault(),13==e.keyCode?gotoCurrentResult():27==e.keyCode?$field.blur():38==e.keyCode?setCurrentResult(-1):40==e.keyCode&&setCurrentResult(1)):preventPress=!1}).on("keypress",function(e){preventPress&&e.preventDefault()}),$("body").on("keydown",function(e){e.altKey||e.ctrlKey||e.metaKey||!hasFocus&&47this.groups.length-1&&(index=this.groups.length-1),this.index!=index){var to=this.groups[index];if(-1 .tsd-signature");if(!($signatures.length<2)){this.$container=this.$el.siblings(".tsd-descriptions");var $descriptions=this.$container.find("> .tsd-description");this.groups=[],$signatures.each(function(index,el){_this.groups.push(new SignatureGroup($(el),$descriptions.eq(index)))})}},Signature.prototype.onClick=function(e){var _this=this;e.preventDefault(),_(this.groups).forEach(function(group,index){group.$signature.is(e.currentTarget)&&_this.setIndex(index)})},Signature}(Backbone.View);typedoc.registerComponent(Signature,".tsd-signatures")}(typedoc||(typedoc={})),function(typedoc){var Toggle=function(_super){function Toggle(options){var _this=_super.call(this,options)||this;return _this.className=_this.$el.attr("data-toggle")||"",_this.$el.on(typedoc.pointerUp,function(e){return _this.onPointerUp(e)}),_this.$el.on("click",function(e){return e.preventDefault()}),typedoc.$document.on(typedoc.pointerDown,function(e){return _this.onDocumentPointerDown(e)}),typedoc.$document.on(typedoc.pointerUp,function(e){return _this.onDocumentPointerUp(e)}),_this}return __extends(Toggle,_super),Toggle.prototype.setActive=function(value){if(this.active!=value){this.active=value,typedoc.$html.toggleClass("has-"+this.className,value),this.$el.toggleClass("active",value);var transition=(this.active?"to-has-":"from-has-")+this.className;typedoc.$html.addClass(transition),setTimeout(function(){return typedoc.$html.removeClass(transition)},500)}},Toggle.prototype.onPointerUp=function(event){typedoc.hasPointerMoved||(this.setActive(!0),event.preventDefault())},Toggle.prototype.onDocumentPointerDown=function(e){if(this.active){var $path=$(e.target).parents().addBack();if($path.hasClass("col-menu"))return;if($path.hasClass("tsd-filter-group"))return;this.setActive(!1)}},Toggle.prototype.onDocumentPointerUp=function(e){var _this=this;if(!typedoc.hasPointerMoved&&this.active){var $path=$(e.target).parents().addBack();if($path.hasClass("col-menu")){var $link=$path.filter("a");if($link.length){var href=window.location.href;-1!=href.indexOf("#")&&(href=href.substr(0,href.indexOf("#"))),$link.prop("href").substr(0,href.length)==href&&setTimeout(function(){return _this.setActive(!1)},250)}}}},Toggle}(Backbone.View);typedoc.registerComponent(Toggle,"a[data-toggle]")}(typedoc||(typedoc={})),function(typedoc){typedoc.app=new typedoc.Application}(typedoc||(typedoc={})); \ No newline at end of file +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";function x(e){return null!=e&&e===e.window}var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0>10|55296,1023&r|56320)}function oe(){T()}var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,k="sizzle"+1*new Date,m=n.document,S=0,r=0,p=ue(),x=ue(),N=ue(),A=ue(),D=function(e,t){return e===t&&(l=!0),0},j={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){for((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;o--;)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){for(var n=e.split("|"),r=n.length;r--;)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){for(var n,r=a([],e.length,o),i=r.length;i--;)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&void 0!==e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if(void 0!==t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if(void 0!==t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];for(i=t.getElementsByName(e),r=0;o=i[r++];)if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"!==e)return o;for(;n=o[i++];)1===n.nodeType&&r.push(n);return r},b.find.CLASS=d.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);for(n=e;n=n.parentNode;)a.unshift(n);for(n=t;n=n.parentNode;)s.unshift(n);for(;a[r]===s[r];)r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"!=typeof e)return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this);if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};function ve(e,t){var n;return n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v)for(n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return void 0!==k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;l--;)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){for(l=(t=(t||"").match(R)||[""]).length;l--;)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){for(f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;o--;)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
    ",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),i=("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,r.left):(a=parseFloat(o)||0,parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{for(t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position");)e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent;e&&"static"===k.css(e,"position");)e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0":">",'"':""","'":"'","`":"`"},P=h.invert(L);h.escape=W(L),h.unescape=W(P),h.result=function(n,r,t){h.isArray(r)||(r=[r]);var e=r.length;if(!e)return h.isFunction(t)?t.call(n):t;for(var u=0;u/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};function $(n){return"\\"+U[n]}var J=/(.)^/,U={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},V=/\\|'|\r|\n|\u2028|\u2029/g;h.template=function(i,n,r){!n&&r&&(n=r),n=h.defaults({},n,h.templateSettings);var t,e=RegExp([(n.escape||J).source,(n.interpolate||J).source,(n.evaluate||J).source].join("|")+"|$","g"),o=0,a="__p+='";i.replace(e,function(n,r,t,e,u){return a+=i.slice(o,u).replace(V,$),o=u+n.length,r?a+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'":t?a+="'+\n((__t=("+t+"))==null?'':__t)+\n'":e&&(a+="';\n"+e+"\n__p+='"),n}),a+="';\n",n.variable||(a="with(obj||{}){\n"+a+"}\n"),a="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+a+"return __p;\n";try{t=new Function(n.variable||"obj","_",a)}catch(n){throw n.source=a,n}function u(n){return t.call(this,n,h)}var c=n.variable||"obj";return u.source="function("+c+"){\n"+a+"}",u},h.chain=function(n){var r=h(n);return r._chain=!0,r};function G(n,r){return n._chain?h(r).chain():r}h.mixin=function(t){return h.each(h.functions(t),function(n){var r=h[n]=t[n];h.prototype[n]=function(){var n=[this._wrapped];return u.apply(n,arguments),G(this,r.apply(h,n))}}),h},h.mixin(h),h.each(["pop","push","reverse","shift","sort","splice","unshift"],function(r){var t=e[r];h.prototype[r]=function(){var n=this._wrapped;return t.apply(n,arguments),"shift"!==r&&"splice"!==r||0!==n.length||delete n[0],G(this,n)}}),h.each(["concat","join","slice"],function(n){var r=e[n];h.prototype[n]=function(){return G(this,r.apply(this._wrapped,arguments))}}),h.prototype.value=function(){return this._wrapped},h.prototype.valueOf=h.prototype.toJSON=h.prototype.value,h.prototype.toString=function(){return String(this._wrapped)},"function"==typeof define&&define.amd&&define("underscore",[],function(){return h})}(),function(t){var e="object"==typeof self&&self.self===self&&self||"object"==typeof global&&global.global===global&&global;if("function"==typeof define&&define.amd)define(["underscore","jquery","exports"],function(i,n,r){e.Backbone=t(e,r,i,n)});else if("undefined"!=typeof exports){var n,i=require("underscore");try{n=require("jquery")}catch(r){}t(e,exports,i,n)}else e.Backbone=t(e,{},e._,e.jQuery||e.Zepto||e.ender||e.$)}(function(t,e,i,n){var r=t.Backbone,s=Array.prototype.slice;e.VERSION="1.4.0",e.$=n,e.noConflict=function(){return t.Backbone=r,this},e.emulateHTTP=!1,e.emulateJSON=!1;var h,a=e.Events={},o=/\s+/,u=function(t,e,n,r,s){var h,a=0;if(n&&"object"==typeof n){void 0!==r&&"context"in s&&void 0===s.context&&(s.context=r);for(h=i.keys(n);athis.length&&(r=this.length),r<0&&(r+=this.length+1);var g,m,s=[],a=[],o=[],h=[],u={},l=e.add,c=e.merge,f=e.remove,d=!1,v=this.comparator&&null==r&&!1!==e.sort,p=i.isString(this.comparator)?this.comparator:null;for(m=0;m=this.length)return e.QueryLexer.EOS;var t=this.str.charAt(this.pos);return this.pos+=1,t},e.QueryLexer.prototype.width=function(){return this.pos-this.start},e.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},e.QueryLexer.prototype.backup=function(){this.pos-=1},e.QueryLexer.prototype.acceptDigitRun=function(){for(var t,r;47<(r=(t=this.next()).charCodeAt(0))&&r<58;);t!=e.QueryLexer.EOS&&this.backup()},e.QueryLexer.prototype.more=function(){return this.pos=this.scrollTop||0===this.scrollTop,isShown!==this.showToolbar&&(this.toolbar.classList.toggle("tsd-page-toolbar--hide"),this.secondaryNav.classList.toggle("tsd-navigation--toolbar-hide")),this.lastY=this.scrollTop},Viewport}(typedoc.Events);typedoc.Viewport=Viewport,typedoc.registerService(Viewport,"viewport")}(typedoc||(typedoc={})),function(typedoc){typedoc.pointerDown="mousedown",typedoc.pointerMove="mousemove",typedoc.pointerUp="mouseup",typedoc.pointerDownPosition={x:0,y:0},typedoc.preventNextClick=!1,typedoc.isPointerDown=!1,typedoc.isPointerTouch=!1,typedoc.hasPointerMoved=!1,typedoc.isMobile=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),typedoc.$html.addClass(typedoc.isMobile?"is-mobile":"not-mobile"),typedoc.isMobile&&"ontouchstart"in document.documentElement&&(typedoc.isPointerTouch=!0,typedoc.pointerDown="touchstart",typedoc.pointerMove="touchmove",typedoc.pointerUp="touchend"),typedoc.$document.on(typedoc.pointerDown,function(e){typedoc.isPointerDown=!0,typedoc.hasPointerMoved=!1;var t="touchstart"==typedoc.pointerDown?e.originalEvent.targetTouches[0]:e;typedoc.pointerDownPosition.y=t.pageY||0,typedoc.pointerDownPosition.x=t.pageX||0}).on(typedoc.pointerMove,function(e){if(typedoc.isPointerDown&&!typedoc.hasPointerMoved){var t="touchstart"==typedoc.pointerDown?e.originalEvent.targetTouches[0]:e,x=typedoc.pointerDownPosition.x-(t.pageX||0),y=typedoc.pointerDownPosition.y-(t.pageY||0);typedoc.hasPointerMoved=10scrollTop;)index-=1;for(;index"+match+""}),parent=row.parent||"";(parent=parent.replace(new RegExp(query,"i"),function(match){return""+match+""}))&&(name=''+parent+"."+name),$results.append('
  • '+name+"
  • ")}}}function setLoadingState(value){loadingState!=value&&($el.removeClass(SearchLoadingState[loadingState].toLowerCase()),loadingState=value,$el.addClass(SearchLoadingState[loadingState].toLowerCase()),value==SearchLoadingState.Ready&&updateResults())}function setHasFocus(value){hasFocus!=value&&(hasFocus=value,$el.toggleClass("has-focus"),value?(setQuery(""),$field.val("")):$field.val(query))}function setQuery(value){query=$.trim(value),updateResults()}function setCurrentResult(dir){var $current=$results.find(".current");if(0==$current.length)$results.find(1==dir?"li:first-child":"li:last-child").addClass("current");else{var $rel=1==dir?$current.next("li"):$current.prev("li");0<$rel.length&&($current.removeClass("current"),$rel.addClass("current"))}}function gotoCurrentResult(){var $current=$results.find(".current");0==$current.length&&($current=$results.find("li:first-child")),0<$current.length&&(window.location.href=$current.find("a").prop("href"),$field.blur())}$results.on("mousedown",function(){resultClicked=!0}).on("mouseup",function(){setHasFocus(resultClicked=!1)}),$field.on("focusin",function(){setHasFocus(!0),loadIndex()}).on("focusout",function(){resultClicked?resultClicked=!1:setTimeout(function(){return setHasFocus(!1)},100)}).on("input",function(){setQuery($.trim(($field.val()||"").toString()))}).on("keydown",function(e){13==e.keyCode||27==e.keyCode||38==e.keyCode||40==e.keyCode?(preventPress=!0,e.preventDefault(),13==e.keyCode?gotoCurrentResult():27==e.keyCode?$field.blur():38==e.keyCode?setCurrentResult(-1):40==e.keyCode&&setCurrentResult(1)):preventPress=!1}).on("keypress",function(e){preventPress&&e.preventDefault()}),$("body").on("keydown",function(e){e.altKey||e.ctrlKey||e.metaKey||!hasFocus&&47this.groups.length-1&&(index=this.groups.length-1),this.index!=index){var to=this.groups[index];if(-1 .tsd-signature");if(!($signatures.length<2)){this.$container=this.$el.siblings(".tsd-descriptions");var $descriptions=this.$container.find("> .tsd-description");this.groups=[],$signatures.each(function(index,el){_this.groups.push(new SignatureGroup($(el),$descriptions.eq(index)))})}},Signature.prototype.onClick=function(e){var _this=this;_(this.groups).forEach(function(group,index){group.$signature.is(e.currentTarget)&&_this.setIndex(index)})},Signature}(Backbone.View);typedoc.registerComponent(Signature,".tsd-signatures")}(typedoc||(typedoc={})),function(typedoc){var Toggle=function(_super){function Toggle(options){var _this=_super.call(this,options)||this;return _this.className=_this.$el.attr("data-toggle")||"",_this.$el.on(typedoc.pointerUp,function(e){return _this.onPointerUp(e)}),_this.$el.on("click",function(e){return e.preventDefault()}),typedoc.$document.on(typedoc.pointerDown,function(e){return _this.onDocumentPointerDown(e)}),typedoc.$document.on(typedoc.pointerUp,function(e){return _this.onDocumentPointerUp(e)}),_this}return __extends(Toggle,_super),Toggle.prototype.setActive=function(value){if(this.active!=value){this.active=value,typedoc.$html.toggleClass("has-"+this.className,value),this.$el.toggleClass("active",value);var transition=(this.active?"to-has-":"from-has-")+this.className;typedoc.$html.addClass(transition),setTimeout(function(){return typedoc.$html.removeClass(transition)},500)}},Toggle.prototype.onPointerUp=function(event){typedoc.hasPointerMoved||(this.setActive(!0),event.preventDefault())},Toggle.prototype.onDocumentPointerDown=function(e){if(this.active){var $path=$(e.target).parents().addBack();if($path.hasClass("col-menu"))return;if($path.hasClass("tsd-filter-group"))return;this.setActive(!1)}},Toggle.prototype.onDocumentPointerUp=function(e){var _this=this;if(!typedoc.hasPointerMoved&&this.active){var $path=$(e.target).parents().addBack();if($path.hasClass("col-menu")){var $link=$path.filter("a");if($link.length){var href=window.location.href;-1!=href.indexOf("#")&&(href=href.substr(0,href.indexOf("#"))),$link.prop("href").substr(0,href.length)==href&&setTimeout(function(){return _this.setActive(!1)},250)}}}},Toggle}(Backbone.View);typedoc.registerComponent(Toggle,"a[data-toggle]")}(typedoc||(typedoc={})),function(typedoc){typedoc.app=new typedoc.Application}(typedoc||(typedoc={})); \ No newline at end of file diff --git a/docs/api/assets/js/search.js b/docs/api/assets/js/search.js index 46ca3b4..f64c728 100644 --- a/docs/api/assets/js/search.js +++ b/docs/api/assets/js/search.js @@ -1,3 +1,3 @@ var typedoc = typedoc || {}; typedoc.search = typedoc.search || {}; - typedoc.search.data = {"kinds":{"4":"Enumeration","16":"Enumeration member","32":"Variable","64":"Function","128":"Class","256":"Interface","512":"Constructor","1024":"Property","2048":"Method","65536":"Type literal","2097152":"Object literal","4194304":"Type alias"},"rows":[{"id":0,"kind":4,"name":"ConnectionStatus","url":"enums/connectionstatus.html","classes":"tsd-kind-enum"},{"id":1,"kind":16,"name":"CONNECTING","url":"enums/connectionstatus.html#connecting","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"ConnectionStatus"},{"id":2,"kind":16,"name":"CONNECTED","url":"enums/connectionstatus.html#connected","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"ConnectionStatus"},{"id":3,"kind":16,"name":"DISCONNECTED","url":"enums/connectionstatus.html#disconnected","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"ConnectionStatus"},{"id":4,"kind":256,"name":"StorageAdapterOptions","url":"interfaces/storageadapteroptions.html","classes":"tsd-kind-interface"},{"id":5,"kind":1024,"name":"expiresIn","url":"interfaces/storageadapteroptions.html#expiresin","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"StorageAdapterOptions"},{"id":6,"kind":256,"name":"StorageAdapter","url":"interfaces/storageadapter.html","classes":"tsd-kind-interface"},{"id":7,"kind":2048,"name":"setOptions","url":"interfaces/storageadapter.html#setoptions","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"StorageAdapter"},{"id":8,"kind":2048,"name":"onConnect","url":"interfaces/storageadapter.html#onconnect","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"StorageAdapter"},{"id":9,"kind":2048,"name":"getConnectionStatus","url":"interfaces/storageadapter.html#getconnectionstatus","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"StorageAdapter"},{"id":10,"kind":2048,"name":"set","url":"interfaces/storageadapter.html#set","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"StorageAdapter"},{"id":11,"kind":2048,"name":"mset","url":"interfaces/storageadapter.html#mset","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"StorageAdapter"},{"id":12,"kind":2048,"name":"get","url":"interfaces/storageadapter.html#get","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"StorageAdapter"},{"id":13,"kind":2048,"name":"mget","url":"interfaces/storageadapter.html#mget","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"StorageAdapter"},{"id":14,"kind":2048,"name":"del","url":"interfaces/storageadapter.html#del","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"StorageAdapter"},{"id":15,"kind":2048,"name":"acquireLock","url":"interfaces/storageadapter.html#acquirelock","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"StorageAdapter"},{"id":16,"kind":2048,"name":"releaseLock","url":"interfaces/storageadapter.html#releaselock","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"StorageAdapter"},{"id":17,"kind":2048,"name":"isLockExists","url":"interfaces/storageadapter.html#islockexists","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"StorageAdapter"},{"id":18,"kind":64,"name":"default","url":"globals.html#default","classes":"tsd-kind-function"},{"id":19,"kind":2097152,"name":"ERRORS","url":"globals.html#errors","classes":"tsd-kind-object-literal"},{"id":20,"kind":32,"name":"ParseError","url":"globals.html#errors.parseerror","classes":"tsd-kind-variable tsd-parent-kind-object-literal","parent":"ERRORS"},{"id":21,"kind":32,"name":"RequestMaximumTimeoutExceededError","url":"globals.html#errors.requestmaximumtimeoutexceedederror","classes":"tsd-kind-variable tsd-parent-kind-object-literal","parent":"ERRORS"},{"id":22,"kind":32,"name":"WaitForResultError","url":"globals.html#errors.waitforresulterror","classes":"tsd-kind-variable tsd-parent-kind-object-literal","parent":"ERRORS"},{"id":23,"kind":32,"name":"OperationTimeoutError","url":"globals.html#errors.operationtimeouterror","classes":"tsd-kind-variable tsd-parent-kind-object-literal","parent":"ERRORS"},{"id":24,"kind":2097152,"name":"EXPIRES_IN","url":"globals.html#expires_in","classes":"tsd-kind-object-literal"},{"id":25,"kind":32,"name":"minute","url":"globals.html#expires_in.minute","classes":"tsd-kind-variable tsd-parent-kind-object-literal","parent":"EXPIRES_IN"},{"id":26,"kind":32,"name":"hour","url":"globals.html#expires_in.hour","classes":"tsd-kind-variable tsd-parent-kind-object-literal","parent":"EXPIRES_IN"},{"id":27,"kind":32,"name":"day","url":"globals.html#expires_in.day","classes":"tsd-kind-variable tsd-parent-kind-object-literal","parent":"EXPIRES_IN"},{"id":28,"kind":64,"name":"ParseError","url":"globals.html#parseerror","classes":"tsd-kind-function"},{"id":29,"kind":64,"name":"RequestMaximumTimeoutExceededError","url":"globals.html#requestmaximumtimeoutexceedederror","classes":"tsd-kind-function"},{"id":30,"kind":64,"name":"WaitForResultError","url":"globals.html#waitforresulterror","classes":"tsd-kind-function"},{"id":31,"kind":64,"name":"OperationTimeoutError","url":"globals.html#operationtimeouterror","classes":"tsd-kind-function"},{"id":32,"kind":64,"name":"withTimeout","url":"globals.html#withtimeout","classes":"tsd-kind-function"},{"id":33,"kind":128,"name":"RedisStorageAdapter","url":"classes/redisstorageadapter.html","classes":"tsd-kind-class"},{"id":34,"kind":512,"name":"constructor","url":"classes/redisstorageadapter.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class","parent":"RedisStorageAdapter"},{"id":35,"kind":1024,"name":"options","url":"classes/redisstorageadapter.html#options","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-private","parent":"RedisStorageAdapter"},{"id":36,"kind":1024,"name":"redisInstance","url":"classes/redisstorageadapter.html#redisinstance","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-private","parent":"RedisStorageAdapter"},{"id":37,"kind":1024,"name":"connectionStatus","url":"classes/redisstorageadapter.html#connectionstatus","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-private","parent":"RedisStorageAdapter"},{"id":38,"kind":2048,"name":"getConnectionStatus","url":"classes/redisstorageadapter.html#getconnectionstatus","classes":"tsd-kind-method tsd-parent-kind-class","parent":"RedisStorageAdapter"},{"id":39,"kind":2048,"name":"onConnect","url":"classes/redisstorageadapter.html#onconnect","classes":"tsd-kind-method tsd-parent-kind-class","parent":"RedisStorageAdapter"},{"id":40,"kind":2048,"name":"set","url":"classes/redisstorageadapter.html#set","classes":"tsd-kind-method tsd-parent-kind-class","parent":"RedisStorageAdapter"},{"id":41,"kind":2048,"name":"mset","url":"classes/redisstorageadapter.html#mset","classes":"tsd-kind-method tsd-parent-kind-class","parent":"RedisStorageAdapter"},{"id":42,"kind":2048,"name":"get","url":"classes/redisstorageadapter.html#get","classes":"tsd-kind-method tsd-parent-kind-class","parent":"RedisStorageAdapter"},{"id":43,"kind":2048,"name":"mget","url":"classes/redisstorageadapter.html#mget","classes":"tsd-kind-method tsd-parent-kind-class","parent":"RedisStorageAdapter"},{"id":44,"kind":2048,"name":"del","url":"classes/redisstorageadapter.html#del","classes":"tsd-kind-method tsd-parent-kind-class","parent":"RedisStorageAdapter"},{"id":45,"kind":2048,"name":"acquireLock","url":"classes/redisstorageadapter.html#acquirelock","classes":"tsd-kind-method tsd-parent-kind-class","parent":"RedisStorageAdapter"},{"id":46,"kind":2048,"name":"releaseLock","url":"classes/redisstorageadapter.html#releaselock","classes":"tsd-kind-method tsd-parent-kind-class","parent":"RedisStorageAdapter"},{"id":47,"kind":2048,"name":"isLockExists","url":"classes/redisstorageadapter.html#islockexists","classes":"tsd-kind-method tsd-parent-kind-class","parent":"RedisStorageAdapter"},{"id":48,"kind":2048,"name":"setConnectionStatus","url":"classes/redisstorageadapter.html#setconnectionstatus","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-private","parent":"RedisStorageAdapter"},{"id":49,"kind":32,"name":"CACHE_PREFIX","url":"globals.html#cache_prefix","classes":"tsd-kind-variable"},{"id":50,"kind":32,"name":"DEFAULT_OPERATION_TIMEOUT","url":"globals.html#default_operation_timeout","classes":"tsd-kind-variable"},{"id":51,"kind":32,"name":"DEFAULT_LOCK_EXPIRES","url":"globals.html#default_lock_expires","classes":"tsd-kind-variable"},{"id":52,"kind":4194304,"name":"CommandArgument","url":"globals.html#commandargument","classes":"tsd-kind-type-alias"},{"id":53,"kind":4194304,"name":"RedisStorageAdapterOptions","url":"globals.html#redisstorageadapteroptions","classes":"tsd-kind-type-alias"},{"id":54,"kind":65536,"name":"__type","url":"globals.html#redisstorageadapteroptions.__type","classes":"tsd-kind-type-literal tsd-parent-kind-type-alias tsd-is-not-exported","parent":"RedisStorageAdapterOptions"},{"id":55,"kind":32,"name":"operationTimeout","url":"globals.html#redisstorageadapteroptions.__type.operationtimeout","classes":"tsd-kind-variable tsd-parent-kind-type-literal tsd-is-not-exported","parent":"RedisStorageAdapterOptions.__type"},{"id":56,"kind":32,"name":"lockExpireTimeout","url":"globals.html#redisstorageadapteroptions.__type.lockexpiretimeout","classes":"tsd-kind-variable tsd-parent-kind-type-literal tsd-is-not-exported","parent":"RedisStorageAdapterOptions.__type"},{"id":57,"kind":128,"name":"RedisMock","url":"classes/redismock.html","classes":"tsd-kind-class tsd-is-not-exported"},{"id":58,"kind":2048,"name":"listenerCount","url":"classes/redismock.html#listenercount-1","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-inherited tsd-is-static tsd-is-not-exported","parent":"RedisMock"},{"id":59,"kind":1024,"name":"defaultMaxListeners","url":"classes/redismock.html#defaultmaxlisteners","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-inherited tsd-is-static tsd-is-not-exported","parent":"RedisMock"},{"id":60,"kind":2048,"name":"addListener","url":"classes/redismock.html#addlistener","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-overwrite tsd-is-inherited tsd-is-not-exported","parent":"RedisMock"},{"id":61,"kind":2048,"name":"on","url":"classes/redismock.html#on","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-overwrite tsd-is-inherited tsd-is-not-exported","parent":"RedisMock"},{"id":62,"kind":2048,"name":"once","url":"classes/redismock.html#once","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-overwrite tsd-is-inherited tsd-is-not-exported","parent":"RedisMock"},{"id":63,"kind":2048,"name":"prependListener","url":"classes/redismock.html#prependlistener","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-overwrite tsd-is-inherited tsd-is-not-exported","parent":"RedisMock"},{"id":64,"kind":2048,"name":"prependOnceListener","url":"classes/redismock.html#prependoncelistener","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-overwrite tsd-is-inherited tsd-is-not-exported","parent":"RedisMock"},{"id":65,"kind":2048,"name":"removeListener","url":"classes/redismock.html#removelistener","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-overwrite tsd-is-inherited tsd-is-not-exported","parent":"RedisMock"},{"id":66,"kind":2048,"name":"removeAllListeners","url":"classes/redismock.html#removealllisteners","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-overwrite tsd-is-inherited tsd-is-not-exported","parent":"RedisMock"},{"id":67,"kind":2048,"name":"setMaxListeners","url":"classes/redismock.html#setmaxlisteners","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-overwrite tsd-is-inherited tsd-is-not-exported","parent":"RedisMock"},{"id":68,"kind":2048,"name":"getMaxListeners","url":"classes/redismock.html#getmaxlisteners","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-overwrite tsd-is-inherited tsd-is-not-exported","parent":"RedisMock"},{"id":69,"kind":2048,"name":"listeners","url":"classes/redismock.html#listeners","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-overwrite tsd-is-inherited tsd-is-not-exported","parent":"RedisMock"},{"id":70,"kind":2048,"name":"emit","url":"classes/redismock.html#emit","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-overwrite tsd-is-inherited tsd-is-not-exported","parent":"RedisMock"},{"id":71,"kind":2048,"name":"eventNames","url":"classes/redismock.html#eventnames","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-overwrite tsd-is-inherited tsd-is-not-exported","parent":"RedisMock"},{"id":72,"kind":2048,"name":"listenerCount","url":"classes/redismock.html#listenercount","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-overwrite tsd-is-inherited tsd-is-not-exported","parent":"RedisMock"},{"id":73,"kind":32,"name":"mock","url":"globals.html#mock","classes":"tsd-kind-variable tsd-is-not-exported"},{"id":74,"kind":32,"name":"adapter","url":"globals.html#adapter","classes":"tsd-kind-variable tsd-is-not-exported"},{"id":75,"kind":128,"name":"TestStorageAdapter","url":"classes/teststorageadapter.html","classes":"tsd-kind-class"},{"id":76,"kind":1024,"name":"options","url":"classes/teststorageadapter.html#options","classes":"tsd-kind-property tsd-parent-kind-class","parent":"TestStorageAdapter"},{"id":77,"kind":1024,"name":"testInterface","url":"classes/teststorageadapter.html#testinterface","classes":"tsd-kind-property tsd-parent-kind-class","parent":"TestStorageAdapter"},{"id":78,"kind":1024,"name":"isConnected","url":"classes/teststorageadapter.html#isconnected","classes":"tsd-kind-property tsd-parent-kind-class","parent":"TestStorageAdapter"},{"id":79,"kind":1024,"name":"internalStorage","url":"classes/teststorageadapter.html#internalstorage","classes":"tsd-kind-property tsd-parent-kind-class","parent":"TestStorageAdapter"},{"id":80,"kind":512,"name":"constructor","url":"classes/teststorageadapter.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class","parent":"TestStorageAdapter"},{"id":81,"kind":2048,"name":"checkConnection","url":"classes/teststorageadapter.html#checkconnection","classes":"tsd-kind-method tsd-parent-kind-class","parent":"TestStorageAdapter"},{"id":82,"kind":2048,"name":"getConnectionStatus","url":"classes/teststorageadapter.html#getconnectionstatus","classes":"tsd-kind-method tsd-parent-kind-class","parent":"TestStorageAdapter"},{"id":83,"kind":2048,"name":"onConnect","url":"classes/teststorageadapter.html#onconnect","classes":"tsd-kind-method tsd-parent-kind-class","parent":"TestStorageAdapter"},{"id":84,"kind":2048,"name":"set","url":"classes/teststorageadapter.html#set","classes":"tsd-kind-method tsd-parent-kind-class","parent":"TestStorageAdapter"},{"id":85,"kind":2048,"name":"get","url":"classes/teststorageadapter.html#get","classes":"tsd-kind-method tsd-parent-kind-class","parent":"TestStorageAdapter"},{"id":86,"kind":2048,"name":"del","url":"classes/teststorageadapter.html#del","classes":"tsd-kind-method tsd-parent-kind-class","parent":"TestStorageAdapter"},{"id":87,"kind":2048,"name":"acquireLock","url":"classes/teststorageadapter.html#acquirelock","classes":"tsd-kind-method tsd-parent-kind-class","parent":"TestStorageAdapter"},{"id":88,"kind":2048,"name":"releaseLock","url":"classes/teststorageadapter.html#releaselock","classes":"tsd-kind-method tsd-parent-kind-class","parent":"TestStorageAdapter"},{"id":89,"kind":2048,"name":"isLockExists","url":"classes/teststorageadapter.html#islockexists","classes":"tsd-kind-method tsd-parent-kind-class","parent":"TestStorageAdapter"},{"id":90,"kind":2048,"name":"mset","url":"classes/teststorageadapter.html#mset","classes":"tsd-kind-method tsd-parent-kind-class","parent":"TestStorageAdapter"},{"id":91,"kind":2048,"name":"mget","url":"classes/teststorageadapter.html#mget","classes":"tsd-kind-method tsd-parent-kind-class","parent":"TestStorageAdapter"},{"id":92,"kind":256,"name":"LockedKeyRetrieveStrategy","url":"interfaces/lockedkeyretrievestrategy.html","classes":"tsd-kind-interface"},{"id":93,"kind":2048,"name":"getName","url":"interfaces/lockedkeyretrievestrategy.html#getname","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"LockedKeyRetrieveStrategy"},{"id":94,"kind":2048,"name":"get","url":"interfaces/lockedkeyretrievestrategy.html#get","classes":"tsd-kind-method tsd-parent-kind-interface tsd-has-type-parameter","parent":"LockedKeyRetrieveStrategy"},{"id":95,"kind":4,"name":"LockedKeyRetrieveStrategyTypes","url":"enums/lockedkeyretrievestrategytypes.html","classes":"tsd-kind-enum"},{"id":96,"kind":16,"name":"waitForResult","url":"enums/lockedkeyretrievestrategytypes.html#waitforresult","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"LockedKeyRetrieveStrategyTypes"},{"id":97,"kind":16,"name":"runExecutor","url":"enums/lockedkeyretrievestrategytypes.html#runexecutor","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"LockedKeyRetrieveStrategyTypes"},{"id":98,"kind":4194304,"name":"LockedKeyRetrieveStrategyType","url":"globals.html#lockedkeyretrievestrategytype","classes":"tsd-kind-type-alias"},{"id":99,"kind":256,"name":"Storage","url":"interfaces/storage.html","classes":"tsd-kind-interface"},{"id":100,"kind":2048,"name":"get","url":"interfaces/storage.html#get","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Storage"},{"id":101,"kind":2048,"name":"touch","url":"interfaces/storage.html#touch","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Storage"},{"id":102,"kind":2048,"name":"lockKey","url":"interfaces/storage.html#lockkey","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Storage"},{"id":103,"kind":2048,"name":"releaseKey","url":"interfaces/storage.html#releasekey","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Storage"},{"id":104,"kind":2048,"name":"keyIsLocked","url":"interfaces/storage.html#keyislocked","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Storage"},{"id":105,"kind":2048,"name":"del","url":"interfaces/storage.html#del","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Storage"},{"id":106,"kind":2048,"name":"getTags","url":"interfaces/storage.html#gettags","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Storage"},{"id":107,"kind":2048,"name":"set","url":"interfaces/storage.html#set","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Storage"},{"id":108,"kind":2048,"name":"getConnectionStatus","url":"interfaces/storage.html#getconnectionstatus","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Storage"},{"id":109,"kind":256,"name":"StorageRecordTag","url":"interfaces/storagerecordtag.html","classes":"tsd-kind-interface"},{"id":110,"kind":1024,"name":"name","url":"interfaces/storagerecordtag.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"StorageRecordTag"},{"id":111,"kind":1024,"name":"version","url":"interfaces/storagerecordtag.html#version","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"StorageRecordTag"},{"id":112,"kind":256,"name":"StorageRecord","url":"interfaces/storagerecord.html","classes":"tsd-kind-interface"},{"id":113,"kind":1024,"name":"key","url":"interfaces/storagerecord.html#key","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"StorageRecord"},{"id":114,"kind":1024,"name":"permanent","url":"interfaces/storagerecord.html#permanent","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"StorageRecord"},{"id":115,"kind":1024,"name":"expiresIn","url":"interfaces/storagerecord.html#expiresin","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"StorageRecord"},{"id":116,"kind":1024,"name":"createdAt","url":"interfaces/storagerecord.html#createdat","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"StorageRecord"},{"id":117,"kind":1024,"name":"value","url":"interfaces/storagerecord.html#value","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"StorageRecord"},{"id":118,"kind":1024,"name":"tags","url":"interfaces/storagerecord.html#tags","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"StorageRecord"},{"id":119,"kind":256,"name":"ReadOptions","url":"interfaces/readoptions.html","classes":"tsd-kind-interface"},{"id":120,"kind":1024,"name":"lockedKeyRetrieveStrategyType","url":"interfaces/readoptions.html#lockedkeyretrievestrategytype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ReadOptions"},{"id":121,"kind":256,"name":"ExpireOptions","url":"interfaces/expireoptions.html","classes":"tsd-kind-interface"},{"id":122,"kind":1024,"name":"expiresIn","url":"interfaces/expireoptions.html#expiresin","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ExpireOptions"},{"id":123,"kind":1024,"name":"permanent","url":"interfaces/expireoptions.html#permanent","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ExpireOptions"},{"id":124,"kind":256,"name":"WriteOptions","url":"interfaces/writeoptions.html","classes":"tsd-kind-interface"},{"id":125,"kind":1024,"name":"tags","url":"interfaces/writeoptions.html#tags","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"WriteOptions"},{"id":126,"kind":1024,"name":"getTags","url":"interfaces/writeoptions.html#gettags","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"WriteOptions"},{"id":127,"kind":1024,"name":"expiresIn","url":"interfaces/writeoptions.html#expiresin","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"WriteOptions"},{"id":128,"kind":1024,"name":"permanent","url":"interfaces/writeoptions.html#permanent","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"WriteOptions"},{"id":129,"kind":4194304,"name":"StorageRecordValue","url":"globals.html#storagerecordvalue","classes":"tsd-kind-type-alias"},{"id":130,"kind":4194304,"name":"StorageTags","url":"globals.html#storagetags","classes":"tsd-kind-type-alias"},{"id":131,"kind":65536,"name":"__type","url":"globals.html#storagetags.__type","classes":"tsd-kind-type-literal tsd-parent-kind-type-alias tsd-is-not-exported","parent":"StorageTags"},{"id":132,"kind":4194304,"name":"ReadWriteOptions","url":"globals.html#readwriteoptions","classes":"tsd-kind-type-alias"},{"id":133,"kind":256,"name":"ExecutorContext","url":"interfaces/executorcontext.html","classes":"tsd-kind-interface"},{"id":134,"kind":1024,"name":"key","url":"interfaces/executorcontext.html#key","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ExecutorContext"},{"id":135,"kind":1024,"name":"executor","url":"interfaces/executorcontext.html#executor","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ExecutorContext"},{"id":136,"kind":1024,"name":"options","url":"interfaces/executorcontext.html#options","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ExecutorContext"},{"id":137,"kind":1024,"name":"record","url":"interfaces/executorcontext.html#record","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ExecutorContext"},{"id":138,"kind":4194304,"name":"ValueOfExecutor","url":"globals.html#valueofexecutor","classes":"tsd-kind-type-alias tsd-has-type-parameter"},{"id":139,"kind":4194304,"name":"Executor","url":"globals.html#executor","classes":"tsd-kind-type-alias"},{"id":140,"kind":65536,"name":"__type","url":"globals.html#executor.__type","classes":"tsd-kind-type-literal tsd-parent-kind-type-alias tsd-is-not-exported","parent":"Executor"},{"id":141,"kind":256,"name":"RecordErrorContext","url":"interfaces/recorderrorcontext.html","classes":"tsd-kind-interface"},{"id":142,"kind":1024,"name":"record","url":"interfaces/recorderrorcontext.html#record","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RecordErrorContext"},{"id":143,"kind":1024,"name":"recordValue","url":"interfaces/recorderrorcontext.html#recordvalue","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RecordErrorContext"},{"id":144,"kind":64,"name":"createRecord","url":"globals.html#createrecord","classes":"tsd-kind-function"},{"id":145,"kind":256,"name":"Command","url":"interfaces/command.html","classes":"tsd-kind-interface"},{"id":146,"kind":1024,"name":"fn","url":"interfaces/command.html#fn","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Command"},{"id":147,"kind":1024,"name":"params","url":"interfaces/command.html#params","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Command"},{"id":148,"kind":128,"name":"BaseStorage","url":"classes/basestorage.html","classes":"tsd-kind-class"},{"id":149,"kind":512,"name":"constructor","url":"classes/basestorage.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class","parent":"BaseStorage"},{"id":150,"kind":1024,"name":"commandsQueue","url":"classes/basestorage.html#commandsqueue","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-private","parent":"BaseStorage"},{"id":151,"kind":1024,"name":"prefix","url":"classes/basestorage.html#prefix","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-private","parent":"BaseStorage"},{"id":152,"kind":1024,"name":"hashKeys","url":"classes/basestorage.html#hashkeys","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-private","parent":"BaseStorage"},{"id":153,"kind":1024,"name":"adapter","url":"classes/basestorage.html#adapter","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-private","parent":"BaseStorage"},{"id":154,"kind":1024,"name":"tagsAdapter","url":"classes/basestorage.html#tagsadapter","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-private","parent":"BaseStorage"},{"id":155,"kind":2048,"name":"get","url":"classes/basestorage.html#get","classes":"tsd-kind-method tsd-parent-kind-class","parent":"BaseStorage"},{"id":156,"kind":2048,"name":"setTagVersions","url":"classes/basestorage.html#settagversions","classes":"tsd-kind-method tsd-parent-kind-class","parent":"BaseStorage"},{"id":157,"kind":2048,"name":"touch","url":"classes/basestorage.html#touch","classes":"tsd-kind-method tsd-parent-kind-class","parent":"BaseStorage"},{"id":158,"kind":2048,"name":"lockKey","url":"classes/basestorage.html#lockkey","classes":"tsd-kind-method tsd-parent-kind-class","parent":"BaseStorage"},{"id":159,"kind":2048,"name":"releaseKey","url":"classes/basestorage.html#releasekey","classes":"tsd-kind-method tsd-parent-kind-class","parent":"BaseStorage"},{"id":160,"kind":2048,"name":"keyIsLocked","url":"classes/basestorage.html#keyislocked","classes":"tsd-kind-method tsd-parent-kind-class","parent":"BaseStorage"},{"id":161,"kind":2048,"name":"del","url":"classes/basestorage.html#del","classes":"tsd-kind-method tsd-parent-kind-class","parent":"BaseStorage"},{"id":162,"kind":2048,"name":"getTags","url":"classes/basestorage.html#gettags","classes":"tsd-kind-method tsd-parent-kind-class","parent":"BaseStorage"},{"id":163,"kind":2048,"name":"set","url":"classes/basestorage.html#set","classes":"tsd-kind-method tsd-parent-kind-class","parent":"BaseStorage"},{"id":164,"kind":2048,"name":"getConnectionStatus","url":"classes/basestorage.html#getconnectionstatus","classes":"tsd-kind-method tsd-parent-kind-class","parent":"BaseStorage"},{"id":165,"kind":2048,"name":"isRecord","url":"classes/basestorage.html#isrecord","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-private","parent":"BaseStorage"},{"id":166,"kind":2048,"name":"createKey","url":"classes/basestorage.html#createkey","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-private","parent":"BaseStorage"},{"id":167,"kind":2048,"name":"createTagKey","url":"classes/basestorage.html#createtagkey","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-private","parent":"BaseStorage"},{"id":168,"kind":2048,"name":"executeCommandsFromQueue","url":"classes/basestorage.html#executecommandsfromqueue","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-private","parent":"BaseStorage"},{"id":169,"kind":2048,"name":"cachedCommand","url":"classes/basestorage.html#cachedcommand","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-private","parent":"BaseStorage"},{"id":170,"kind":32,"name":"TAGS_VERSIONS_ALIAS","url":"globals.html#tags_versions_alias","classes":"tsd-kind-variable"},{"id":171,"kind":4194304,"name":"BaseStorageOptions","url":"globals.html#basestorageoptions","classes":"tsd-kind-type-alias"},{"id":172,"kind":65536,"name":"__type","url":"globals.html#basestorageoptions.__type","classes":"tsd-kind-type-literal tsd-parent-kind-type-alias tsd-is-not-exported","parent":"BaseStorageOptions"},{"id":173,"kind":32,"name":"adapter","url":"globals.html#basestorageoptions.__type.adapter","classes":"tsd-kind-variable tsd-parent-kind-type-literal tsd-is-not-exported","parent":"BaseStorageOptions.__type"},{"id":174,"kind":32,"name":"tagsAdapter","url":"globals.html#basestorageoptions.__type.tagsadapter","classes":"tsd-kind-variable tsd-parent-kind-type-literal tsd-is-not-exported","parent":"BaseStorageOptions.__type"},{"id":175,"kind":32,"name":"prefix","url":"globals.html#basestorageoptions.__type.prefix","classes":"tsd-kind-variable tsd-parent-kind-type-literal tsd-is-not-exported","parent":"BaseStorageOptions.__type"},{"id":176,"kind":32,"name":"hashKeys","url":"globals.html#basestorageoptions.__type.hashkeys","classes":"tsd-kind-variable tsd-parent-kind-type-literal tsd-is-not-exported","parent":"BaseStorageOptions.__type"},{"id":177,"kind":32,"name":"expiresIn","url":"globals.html#basestorageoptions.__type.expiresin","classes":"tsd-kind-variable tsd-parent-kind-type-literal tsd-is-not-exported","parent":"BaseStorageOptions.__type"},{"id":178,"kind":4194304,"name":"CommandFn","url":"globals.html#commandfn","classes":"tsd-kind-type-alias"},{"id":179,"kind":65536,"name":"__type","url":"globals.html#commandfn.__type","classes":"tsd-kind-type-literal tsd-parent-kind-type-alias tsd-is-not-exported","parent":"CommandFn"},{"id":180,"kind":256,"name":"Logger","url":"interfaces/logger.html","classes":"tsd-kind-interface"},{"id":181,"kind":2048,"name":"info","url":"interfaces/logger.html#info","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Logger"},{"id":182,"kind":2048,"name":"trace","url":"interfaces/logger.html#trace","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Logger"},{"id":183,"kind":2048,"name":"warn","url":"interfaces/logger.html#warn","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Logger"},{"id":184,"kind":2048,"name":"error","url":"interfaces/logger.html#error","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Logger"},{"id":185,"kind":256,"name":"Manager","url":"interfaces/manager.html","classes":"tsd-kind-interface"},{"id":186,"kind":2048,"name":"get","url":"interfaces/manager.html#get","classes":"tsd-kind-method tsd-parent-kind-interface tsd-has-type-parameter","parent":"Manager"},{"id":187,"kind":2048,"name":"set","url":"interfaces/manager.html#set","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Manager"},{"id":188,"kind":128,"name":"WaitForResultLockedKeyRetrieveStrategy","url":"classes/waitforresultlockedkeyretrievestrategy.html","classes":"tsd-kind-class"},{"id":189,"kind":512,"name":"constructor","url":"classes/waitforresultlockedkeyretrievestrategy.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class","parent":"WaitForResultLockedKeyRetrieveStrategy"},{"id":190,"kind":1024,"name":"maximumTimeout","url":"classes/waitforresultlockedkeyretrievestrategy.html#maximumtimeout","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-private","parent":"WaitForResultLockedKeyRetrieveStrategy"},{"id":191,"kind":1024,"name":"requestTimeout","url":"classes/waitforresultlockedkeyretrievestrategy.html#requesttimeout","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-private","parent":"WaitForResultLockedKeyRetrieveStrategy"},{"id":192,"kind":1024,"name":"keyIsLocked","url":"classes/waitforresultlockedkeyretrievestrategy.html#keyislocked","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-private","parent":"WaitForResultLockedKeyRetrieveStrategy"},{"id":193,"kind":1024,"name":"getRecord","url":"classes/waitforresultlockedkeyretrievestrategy.html#getrecord","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-private","parent":"WaitForResultLockedKeyRetrieveStrategy"},{"id":194,"kind":1024,"name":"logger","url":"classes/waitforresultlockedkeyretrievestrategy.html#logger","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-private","parent":"WaitForResultLockedKeyRetrieveStrategy"},{"id":195,"kind":2048,"name":"getName","url":"classes/waitforresultlockedkeyretrievestrategy.html#getname","classes":"tsd-kind-method tsd-parent-kind-class","parent":"WaitForResultLockedKeyRetrieveStrategy"},{"id":196,"kind":2048,"name":"get","url":"classes/waitforresultlockedkeyretrievestrategy.html#get","classes":"tsd-kind-method tsd-parent-kind-class","parent":"WaitForResultLockedKeyRetrieveStrategy"},{"id":197,"kind":32,"name":"DEFAULT_MAXIMUM_TIMEOUT","url":"globals.html#default_maximum_timeout","classes":"tsd-kind-variable"},{"id":198,"kind":32,"name":"DEFAULT_REQUEST_TIMEOUT","url":"globals.html#default_request_timeout","classes":"tsd-kind-variable"},{"id":199,"kind":4194304,"name":"KeyLockCheckFn","url":"globals.html#keylockcheckfn","classes":"tsd-kind-type-alias"},{"id":200,"kind":65536,"name":"__type","url":"globals.html#keylockcheckfn.__type","classes":"tsd-kind-type-literal tsd-parent-kind-type-alias tsd-is-not-exported","parent":"KeyLockCheckFn"},{"id":201,"kind":4194304,"name":"GetRecordFn","url":"globals.html#getrecordfn","classes":"tsd-kind-type-alias"},{"id":202,"kind":65536,"name":"__type","url":"globals.html#getrecordfn.__type","classes":"tsd-kind-type-literal tsd-parent-kind-type-alias tsd-is-not-exported","parent":"GetRecordFn"},{"id":203,"kind":4194304,"name":"WaitForResultLockedKeyRetrieveStrategyOptions","url":"globals.html#waitforresultlockedkeyretrievestrategyoptions","classes":"tsd-kind-type-alias"},{"id":204,"kind":65536,"name":"__type","url":"globals.html#waitforresultlockedkeyretrievestrategyoptions.__type","classes":"tsd-kind-type-literal tsd-parent-kind-type-alias tsd-is-not-exported","parent":"WaitForResultLockedKeyRetrieveStrategyOptions"},{"id":205,"kind":32,"name":"maximumTimeout","url":"globals.html#waitforresultlockedkeyretrievestrategyoptions.__type.maximumtimeout","classes":"tsd-kind-variable tsd-parent-kind-type-literal tsd-is-not-exported","parent":"WaitForResultLockedKeyRetrieveStrategyOptions.__type"},{"id":206,"kind":32,"name":"requestTimeout","url":"globals.html#waitforresultlockedkeyretrievestrategyoptions.__type.requesttimeout","classes":"tsd-kind-variable tsd-parent-kind-type-literal tsd-is-not-exported","parent":"WaitForResultLockedKeyRetrieveStrategyOptions.__type"},{"id":207,"kind":32,"name":"keyLockCheckFn","url":"globals.html#waitforresultlockedkeyretrievestrategyoptions.__type.keylockcheckfn","classes":"tsd-kind-variable tsd-parent-kind-type-literal tsd-is-not-exported","parent":"WaitForResultLockedKeyRetrieveStrategyOptions.__type"},{"id":208,"kind":32,"name":"getRecord","url":"globals.html#waitforresultlockedkeyretrievestrategyoptions.__type.getrecord","classes":"tsd-kind-variable tsd-parent-kind-type-literal tsd-is-not-exported","parent":"WaitForResultLockedKeyRetrieveStrategyOptions.__type"},{"id":209,"kind":32,"name":"logger","url":"globals.html#waitforresultlockedkeyretrievestrategyoptions.__type.logger","classes":"tsd-kind-variable tsd-parent-kind-type-literal tsd-is-not-exported","parent":"WaitForResultLockedKeyRetrieveStrategyOptions.__type"},{"id":210,"kind":128,"name":"RunExecutorLockedKeyRetrieveStrategy","url":"classes/runexecutorlockedkeyretrievestrategy.html","classes":"tsd-kind-class"},{"id":211,"kind":2048,"name":"getName","url":"classes/runexecutorlockedkeyretrievestrategy.html#getname","classes":"tsd-kind-method tsd-parent-kind-class","parent":"RunExecutorLockedKeyRetrieveStrategy"},{"id":212,"kind":2048,"name":"get","url":"classes/runexecutorlockedkeyretrievestrategy.html#get","classes":"tsd-kind-method tsd-parent-kind-class","parent":"RunExecutorLockedKeyRetrieveStrategy"},{"id":213,"kind":256,"name":"ManagerOptions","url":"interfaces/manageroptions.html","classes":"tsd-kind-interface"},{"id":214,"kind":1024,"name":"prefix","url":"interfaces/manageroptions.html#prefix","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ManagerOptions"},{"id":215,"kind":1024,"name":"hashKeys","url":"interfaces/manageroptions.html#hashkeys","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ManagerOptions"},{"id":216,"kind":1024,"name":"logger","url":"interfaces/manageroptions.html#logger","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ManagerOptions"},{"id":217,"kind":1024,"name":"storage","url":"interfaces/manageroptions.html#storage","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ManagerOptions"},{"id":218,"kind":1024,"name":"refreshAheadFactor","url":"interfaces/manageroptions.html#refreshaheadfactor","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ManagerOptions"},{"id":219,"kind":1024,"name":"lockedKeyRetrieveStrategies","url":"interfaces/manageroptions.html#lockedkeyretrievestrategies","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ManagerOptions"},{"id":220,"kind":1024,"name":"expiresIn","url":"interfaces/manageroptions.html#expiresin","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"ManagerOptions"},{"id":221,"kind":1024,"name":"permanent","url":"interfaces/manageroptions.html#permanent","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"ManagerOptions"},{"id":222,"kind":128,"name":"BaseManager","url":"classes/basemanager.html","classes":"tsd-kind-class"},{"id":223,"kind":512,"name":"constructor","url":"classes/basemanager.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class","parent":"BaseManager"},{"id":224,"kind":1024,"name":"storage","url":"classes/basemanager.html#storage","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-protected","parent":"BaseManager"},{"id":225,"kind":1024,"name":"lockedKeyRetrieveStrategies","url":"classes/basemanager.html#lockedkeyretrievestrategies","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-protected","parent":"BaseManager"},{"id":226,"kind":1024,"name":"logger","url":"classes/basemanager.html#logger","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-protected","parent":"BaseManager"},{"id":227,"kind":2048,"name":"get","url":"classes/basemanager.html#get","classes":"tsd-kind-method tsd-parent-kind-class tsd-has-type-parameter","parent":"BaseManager"},{"id":228,"kind":2048,"name":"set","url":"classes/basemanager.html#set","classes":"tsd-kind-method tsd-parent-kind-class","parent":"BaseManager"},{"id":229,"kind":2048,"name":"isTagsOutdated","url":"classes/basemanager.html#istagsoutdated","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-protected","parent":"BaseManager"},{"id":230,"kind":2048,"name":"updateCacheAndGetResult","url":"classes/basemanager.html#updatecacheandgetresult","classes":"tsd-kind-method tsd-parent-kind-class tsd-has-type-parameter tsd-is-protected","parent":"BaseManager"},{"id":231,"kind":2048,"name":"getLockedKeyRetrieveStrategy","url":"classes/basemanager.html#getlockedkeyretrievestrategy","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-protected","parent":"BaseManager"},{"id":232,"kind":64,"name":"createLogger","url":"globals.html#createlogger","classes":"tsd-kind-function"},{"id":233,"kind":256,"name":"RefreshAheadManagerOptions","url":"interfaces/refreshaheadmanageroptions.html","classes":"tsd-kind-interface"},{"id":234,"kind":1024,"name":"refreshAheadFactor","url":"interfaces/refreshaheadmanageroptions.html#refreshaheadfactor","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite","parent":"RefreshAheadManagerOptions"},{"id":235,"kind":1024,"name":"prefix","url":"interfaces/refreshaheadmanageroptions.html#prefix","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RefreshAheadManagerOptions"},{"id":236,"kind":1024,"name":"hashKeys","url":"interfaces/refreshaheadmanageroptions.html#hashkeys","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RefreshAheadManagerOptions"},{"id":237,"kind":1024,"name":"logger","url":"interfaces/refreshaheadmanageroptions.html#logger","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RefreshAheadManagerOptions"},{"id":238,"kind":1024,"name":"storage","url":"interfaces/refreshaheadmanageroptions.html#storage","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RefreshAheadManagerOptions"},{"id":239,"kind":1024,"name":"lockedKeyRetrieveStrategies","url":"interfaces/refreshaheadmanageroptions.html#lockedkeyretrievestrategies","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RefreshAheadManagerOptions"},{"id":240,"kind":1024,"name":"expiresIn","url":"interfaces/refreshaheadmanageroptions.html#expiresin","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RefreshAheadManagerOptions"},{"id":241,"kind":1024,"name":"permanent","url":"interfaces/refreshaheadmanageroptions.html#permanent","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RefreshAheadManagerOptions"},{"id":242,"kind":128,"name":"RefreshAheadManager","url":"classes/refreshaheadmanager.html","classes":"tsd-kind-class"},{"id":243,"kind":2048,"name":"getName","url":"classes/refreshaheadmanager.html#getname","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-static","parent":"RefreshAheadManager"},{"id":244,"kind":512,"name":"constructor","url":"classes/refreshaheadmanager.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class tsd-is-overwrite","parent":"RefreshAheadManager"},{"id":245,"kind":1024,"name":"refreshAheadFactor","url":"classes/refreshaheadmanager.html#refreshaheadfactor","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-private","parent":"RefreshAheadManager"},{"id":246,"kind":2048,"name":"get","url":"classes/refreshaheadmanager.html#get","classes":"tsd-kind-method tsd-parent-kind-class tsd-has-type-parameter tsd-is-overwrite","parent":"RefreshAheadManager"},{"id":247,"kind":2048,"name":"set","url":"classes/refreshaheadmanager.html#set","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-overwrite","parent":"RefreshAheadManager"},{"id":248,"kind":2048,"name":"isRecordValid","url":"classes/refreshaheadmanager.html#isrecordvalid","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-private","parent":"RefreshAheadManager"},{"id":249,"kind":2048,"name":"isRecordExpireSoon","url":"classes/refreshaheadmanager.html#isrecordexpiresoon","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-private","parent":"RefreshAheadManager"},{"id":250,"kind":2048,"name":"refresh","url":"classes/refreshaheadmanager.html#refresh","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-private","parent":"RefreshAheadManager"},{"id":251,"kind":1024,"name":"storage","url":"classes/refreshaheadmanager.html#storage","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-inherited tsd-is-protected","parent":"RefreshAheadManager"},{"id":252,"kind":1024,"name":"lockedKeyRetrieveStrategies","url":"classes/refreshaheadmanager.html#lockedkeyretrievestrategies","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-inherited tsd-is-protected","parent":"RefreshAheadManager"},{"id":253,"kind":1024,"name":"logger","url":"classes/refreshaheadmanager.html#logger","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-inherited tsd-is-protected","parent":"RefreshAheadManager"},{"id":254,"kind":2048,"name":"isTagsOutdated","url":"classes/refreshaheadmanager.html#istagsoutdated","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-inherited tsd-is-protected","parent":"RefreshAheadManager"},{"id":255,"kind":2048,"name":"updateCacheAndGetResult","url":"classes/refreshaheadmanager.html#updatecacheandgetresult","classes":"tsd-kind-method tsd-parent-kind-class tsd-has-type-parameter tsd-is-inherited tsd-is-protected","parent":"RefreshAheadManager"},{"id":256,"kind":2048,"name":"getLockedKeyRetrieveStrategy","url":"classes/refreshaheadmanager.html#getlockedkeyretrievestrategy","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-inherited tsd-is-protected","parent":"RefreshAheadManager"},{"id":257,"kind":32,"name":"DEFAULT_REFRESH_AHEAD_FACTOR","url":"globals.html#default_refresh_ahead_factor","classes":"tsd-kind-variable"},{"id":258,"kind":256,"name":"CacheWithCustomStorageOptions","url":"interfaces/cachewithcustomstorageoptions.html","classes":"tsd-kind-interface"},{"id":259,"kind":1024,"name":"storage","url":"interfaces/cachewithcustomstorageoptions.html#storage","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"CacheWithCustomStorageOptions"},{"id":260,"kind":256,"name":"CacheWithBaseStorageOptions","url":"interfaces/cachewithbasestorageoptions.html","classes":"tsd-kind-interface"},{"id":261,"kind":1024,"name":"adapter","url":"interfaces/cachewithbasestorageoptions.html#adapter","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"CacheWithBaseStorageOptions"},{"id":262,"kind":1024,"name":"tagsAdapter","url":"interfaces/cachewithbasestorageoptions.html#tagsadapter","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"CacheWithBaseStorageOptions"},{"id":263,"kind":256,"name":"ManagerConstructor","url":"interfaces/managerconstructor.html","classes":"tsd-kind-interface tsd-has-type-parameter"},{"id":264,"kind":512,"name":"constructor","url":"interfaces/managerconstructor.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-interface","parent":"ManagerConstructor"},{"id":265,"kind":2048,"name":"getName","url":"interfaces/managerconstructor.html#getname","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"ManagerConstructor"},{"id":266,"kind":256,"name":"ManagerSelectorOptions","url":"interfaces/managerselectoroptions.html","classes":"tsd-kind-interface"},{"id":267,"kind":1024,"name":"manager","url":"interfaces/managerselectoroptions.html#manager","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ManagerSelectorOptions"},{"id":268,"kind":128,"name":"Cache","url":"classes/cache.html","classes":"tsd-kind-class"},{"id":269,"kind":512,"name":"constructor","url":"classes/cache.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class","parent":"Cache"},{"id":270,"kind":1024,"name":"storage","url":"classes/cache.html#storage","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-private","parent":"Cache"},{"id":271,"kind":1024,"name":"logger","url":"classes/cache.html#logger","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-private","parent":"Cache"},{"id":272,"kind":1024,"name":"expiresIn","url":"classes/cache.html#expiresin","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-private","parent":"Cache"},{"id":273,"kind":1024,"name":"managers","url":"classes/cache.html#managers","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-private","parent":"Cache"},{"id":274,"kind":2048,"name":"get","url":"classes/cache.html#get","classes":"tsd-kind-method tsd-parent-kind-class tsd-has-type-parameter","parent":"Cache"},{"id":275,"kind":2048,"name":"set","url":"classes/cache.html#set","classes":"tsd-kind-method tsd-parent-kind-class","parent":"Cache"},{"id":276,"kind":2048,"name":"touch","url":"classes/cache.html#touch","classes":"tsd-kind-method tsd-parent-kind-class","parent":"Cache"},{"id":277,"kind":2048,"name":"registerManager","url":"classes/cache.html#registermanager","classes":"tsd-kind-method tsd-parent-kind-class","parent":"Cache"},{"id":278,"kind":2048,"name":"getManager","url":"classes/cache.html#getmanager","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-private","parent":"Cache"},{"id":279,"kind":4194304,"name":"CacheOptions","url":"globals.html#cacheoptions","classes":"tsd-kind-type-alias"},{"id":280,"kind":64,"name":"isCustomStorageOptions","url":"globals.html#iscustomstorageoptions","classes":"tsd-kind-function"},{"id":281,"kind":64,"name":"isBaseStorageOptions","url":"globals.html#isbasestorageoptions","classes":"tsd-kind-function"},{"id":282,"kind":128,"name":"TestStorage","url":"classes/teststorage.html","classes":"tsd-kind-class"},{"id":283,"kind":1024,"name":"storage","url":"classes/teststorage.html#storage","classes":"tsd-kind-property tsd-parent-kind-class","parent":"TestStorage"},{"id":284,"kind":1024,"name":"get","url":"classes/teststorage.html#get","classes":"tsd-kind-property tsd-parent-kind-class","parent":"TestStorage"},{"id":285,"kind":1024,"name":"touch","url":"classes/teststorage.html#touch","classes":"tsd-kind-property tsd-parent-kind-class","parent":"TestStorage"},{"id":286,"kind":1024,"name":"lockKey","url":"classes/teststorage.html#lockkey","classes":"tsd-kind-property tsd-parent-kind-class","parent":"TestStorage"},{"id":287,"kind":1024,"name":"releaseKey","url":"classes/teststorage.html#releasekey","classes":"tsd-kind-property tsd-parent-kind-class","parent":"TestStorage"},{"id":288,"kind":1024,"name":"keyIsLocked","url":"classes/teststorage.html#keyislocked","classes":"tsd-kind-property tsd-parent-kind-class","parent":"TestStorage"},{"id":289,"kind":1024,"name":"del","url":"classes/teststorage.html#del","classes":"tsd-kind-property tsd-parent-kind-class","parent":"TestStorage"},{"id":290,"kind":1024,"name":"getTags","url":"classes/teststorage.html#gettags","classes":"tsd-kind-property tsd-parent-kind-class","parent":"TestStorage"},{"id":291,"kind":1024,"name":"set","url":"classes/teststorage.html#set","classes":"tsd-kind-property tsd-parent-kind-class","parent":"TestStorage"},{"id":292,"kind":1024,"name":"getConnectionStatus","url":"classes/teststorage.html#getconnectionstatus","classes":"tsd-kind-property tsd-parent-kind-class","parent":"TestStorage"},{"id":293,"kind":512,"name":"constructor","url":"classes/teststorage.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class","parent":"TestStorage"},{"id":294,"kind":2097152,"name":"logger","url":"globals.html#logger","classes":"tsd-kind-object-literal tsd-is-not-exported"},{"id":295,"kind":32,"name":"info","url":"globals.html#logger.info","classes":"tsd-kind-variable tsd-parent-kind-object-literal tsd-is-not-exported","parent":"logger"},{"id":296,"kind":32,"name":"trace","url":"globals.html#logger.trace","classes":"tsd-kind-variable tsd-parent-kind-object-literal tsd-is-not-exported","parent":"logger"},{"id":297,"kind":32,"name":"warn","url":"globals.html#logger.warn","classes":"tsd-kind-variable tsd-parent-kind-object-literal tsd-is-not-exported","parent":"logger"},{"id":298,"kind":32,"name":"error","url":"globals.html#logger.error","classes":"tsd-kind-variable tsd-parent-kind-object-literal tsd-is-not-exported","parent":"logger"},{"id":299,"kind":32,"name":"mockManager","url":"globals.html#mockmanager","classes":"tsd-kind-variable tsd-is-not-exported"},{"id":300,"kind":32,"name":"instance","url":"globals.html#instance","classes":"tsd-kind-variable tsd-is-not-exported"},{"id":301,"kind":128,"name":"ReadThroughManager","url":"classes/readthroughmanager.html","classes":"tsd-kind-class"},{"id":302,"kind":2048,"name":"getName","url":"classes/readthroughmanager.html#getname","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-static","parent":"ReadThroughManager"},{"id":303,"kind":512,"name":"constructor","url":"classes/readthroughmanager.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class tsd-is-overwrite","parent":"ReadThroughManager"},{"id":304,"kind":2048,"name":"get","url":"classes/readthroughmanager.html#get","classes":"tsd-kind-method tsd-parent-kind-class tsd-has-type-parameter tsd-is-overwrite","parent":"ReadThroughManager"},{"id":305,"kind":2048,"name":"set","url":"classes/readthroughmanager.html#set","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-overwrite","parent":"ReadThroughManager"},{"id":306,"kind":2048,"name":"isRecordValid","url":"classes/readthroughmanager.html#isrecordvalid","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-private","parent":"ReadThroughManager"},{"id":307,"kind":1024,"name":"storage","url":"classes/readthroughmanager.html#storage","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-inherited tsd-is-protected","parent":"ReadThroughManager"},{"id":308,"kind":1024,"name":"lockedKeyRetrieveStrategies","url":"classes/readthroughmanager.html#lockedkeyretrievestrategies","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-inherited tsd-is-protected","parent":"ReadThroughManager"},{"id":309,"kind":1024,"name":"logger","url":"classes/readthroughmanager.html#logger","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-inherited tsd-is-protected","parent":"ReadThroughManager"},{"id":310,"kind":2048,"name":"isTagsOutdated","url":"classes/readthroughmanager.html#istagsoutdated","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-inherited tsd-is-protected","parent":"ReadThroughManager"},{"id":311,"kind":2048,"name":"updateCacheAndGetResult","url":"classes/readthroughmanager.html#updatecacheandgetresult","classes":"tsd-kind-method tsd-parent-kind-class tsd-has-type-parameter tsd-is-inherited tsd-is-protected","parent":"ReadThroughManager"},{"id":312,"kind":2048,"name":"getLockedKeyRetrieveStrategy","url":"classes/readthroughmanager.html#getlockedkeyretrievestrategy","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-inherited tsd-is-protected","parent":"ReadThroughManager"},{"id":313,"kind":128,"name":"WriteThroughManager","url":"classes/writethroughmanager.html","classes":"tsd-kind-class"},{"id":314,"kind":2048,"name":"getName","url":"classes/writethroughmanager.html#getname","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-static","parent":"WriteThroughManager"},{"id":315,"kind":512,"name":"constructor","url":"classes/writethroughmanager.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class tsd-is-overwrite","parent":"WriteThroughManager"},{"id":316,"kind":2048,"name":"get","url":"classes/writethroughmanager.html#get","classes":"tsd-kind-method tsd-parent-kind-class tsd-has-type-parameter tsd-is-overwrite","parent":"WriteThroughManager"},{"id":317,"kind":2048,"name":"set","url":"classes/writethroughmanager.html#set","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-overwrite","parent":"WriteThroughManager"},{"id":318,"kind":2048,"name":"isRecordValid","url":"classes/writethroughmanager.html#isrecordvalid","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-private","parent":"WriteThroughManager"},{"id":319,"kind":1024,"name":"storage","url":"classes/writethroughmanager.html#storage","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-inherited tsd-is-protected","parent":"WriteThroughManager"},{"id":320,"kind":1024,"name":"lockedKeyRetrieveStrategies","url":"classes/writethroughmanager.html#lockedkeyretrievestrategies","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-inherited tsd-is-protected","parent":"WriteThroughManager"},{"id":321,"kind":1024,"name":"logger","url":"classes/writethroughmanager.html#logger","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-inherited tsd-is-protected","parent":"WriteThroughManager"},{"id":322,"kind":2048,"name":"isTagsOutdated","url":"classes/writethroughmanager.html#istagsoutdated","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-inherited tsd-is-protected","parent":"WriteThroughManager"},{"id":323,"kind":2048,"name":"updateCacheAndGetResult","url":"classes/writethroughmanager.html#updatecacheandgetresult","classes":"tsd-kind-method tsd-parent-kind-class tsd-has-type-parameter tsd-is-inherited tsd-is-protected","parent":"WriteThroughManager"},{"id":324,"kind":2048,"name":"getLockedKeyRetrieveStrategy","url":"classes/writethroughmanager.html#getlockedkeyretrievestrategy","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-inherited tsd-is-protected","parent":"WriteThroughManager"},{"id":325,"kind":2097152,"name":"loggerMock","url":"globals.html#loggermock","classes":"tsd-kind-object-literal tsd-is-not-exported"},{"id":326,"kind":32,"name":"error","url":"globals.html#loggermock.error","classes":"tsd-kind-variable tsd-parent-kind-object-literal tsd-is-not-exported","parent":"loggerMock"},{"id":327,"kind":32,"name":"getRecordMock","url":"globals.html#getrecordmock","classes":"tsd-kind-variable tsd-is-not-exported"},{"id":328,"kind":32,"name":"keyLockCheckFnMock","url":"globals.html#keylockcheckfnmock","classes":"tsd-kind-variable tsd-is-not-exported"},{"id":329,"kind":32,"name":"internalStorage","url":"globals.html#internalstorage","classes":"tsd-kind-variable tsd-is-not-exported"},{"id":330,"kind":32,"name":"storage","url":"globals.html#storage","classes":"tsd-kind-variable tsd-is-not-exported"},{"id":331,"kind":32,"name":"manager","url":"globals.html#manager","classes":"tsd-kind-variable tsd-is-not-exported"},{"id":332,"kind":65536,"name":"__type","url":"globals.html#internalstorage.__type","classes":"tsd-kind-type-literal tsd-parent-kind-variable tsd-is-not-exported","parent":"internalStorage"},{"id":333,"kind":1024,"name":"storage","url":"classes/basestorage.html#storage","classes":"tsd-kind-property tsd-parent-kind-class","parent":"BaseStorage"},{"id":334,"kind":2097152,"name":"testInterface","url":"globals.html#testinterface","classes":"tsd-kind-object-literal tsd-is-not-exported"},{"id":335,"kind":32,"name":"internalStorage","url":"globals.html#testinterface.internalstorage","classes":"tsd-kind-variable tsd-parent-kind-object-literal tsd-is-not-exported","parent":"testInterface"},{"id":336,"kind":65536,"name":"__type","url":"globals.html#testinterface.internalstorage.__type","classes":"tsd-kind-type-literal tsd-parent-kind-variable tsd-is-not-exported","parent":"testInterface.internalStorage"},{"id":337,"kind":32,"name":"testAdapter","url":"globals.html#testadapter","classes":"tsd-kind-variable tsd-is-not-exported"}]}; \ No newline at end of file + typedoc.search.data = {"kinds":{"4":"Enumeration","16":"Enumeration member","32":"Variable","64":"Function","128":"Class","256":"Interface","512":"Constructor","1024":"Property","2048":"Method","65536":"Type literal","2097152":"Object literal","4194304":"Type alias"},"rows":[{"id":0,"kind":4,"name":"ConnectionStatus","url":"enums/connectionstatus.html","classes":"tsd-kind-enum"},{"id":1,"kind":16,"name":"CONNECTING","url":"enums/connectionstatus.html#connecting","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"ConnectionStatus"},{"id":2,"kind":16,"name":"CONNECTED","url":"enums/connectionstatus.html#connected","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"ConnectionStatus"},{"id":3,"kind":16,"name":"DISCONNECTED","url":"enums/connectionstatus.html#disconnected","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"ConnectionStatus"},{"id":4,"kind":64,"name":"default","url":"globals.html#default","classes":"tsd-kind-function"},{"id":5,"kind":256,"name":"StorageAdapterOptions","url":"interfaces/storageadapteroptions.html","classes":"tsd-kind-interface"},{"id":6,"kind":1024,"name":"expiresIn","url":"interfaces/storageadapteroptions.html#expiresin","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"StorageAdapterOptions"},{"id":7,"kind":256,"name":"StorageAdapter","url":"interfaces/storageadapter.html","classes":"tsd-kind-interface"},{"id":8,"kind":2048,"name":"setOptions","url":"interfaces/storageadapter.html#setoptions","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"StorageAdapter"},{"id":9,"kind":2048,"name":"onConnect","url":"interfaces/storageadapter.html#onconnect","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"StorageAdapter"},{"id":10,"kind":2048,"name":"getConnectionStatus","url":"interfaces/storageadapter.html#getconnectionstatus","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"StorageAdapter"},{"id":11,"kind":2048,"name":"set","url":"interfaces/storageadapter.html#set","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"StorageAdapter"},{"id":12,"kind":2048,"name":"mset","url":"interfaces/storageadapter.html#mset","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"StorageAdapter"},{"id":13,"kind":2048,"name":"get","url":"interfaces/storageadapter.html#get","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"StorageAdapter"},{"id":14,"kind":2048,"name":"mget","url":"interfaces/storageadapter.html#mget","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"StorageAdapter"},{"id":15,"kind":2048,"name":"addToSet","url":"interfaces/storageadapter.html#addtoset","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"StorageAdapter"},{"id":16,"kind":2048,"name":"deleteFromSet","url":"interfaces/storageadapter.html#deletefromset","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"StorageAdapter"},{"id":17,"kind":2048,"name":"intersectWithSet","url":"interfaces/storageadapter.html#intersectwithset","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"StorageAdapter"},{"id":18,"kind":2048,"name":"del","url":"interfaces/storageadapter.html#del","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"StorageAdapter"},{"id":19,"kind":2048,"name":"acquireLock","url":"interfaces/storageadapter.html#acquirelock","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"StorageAdapter"},{"id":20,"kind":2048,"name":"releaseLock","url":"interfaces/storageadapter.html#releaselock","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"StorageAdapter"},{"id":21,"kind":2048,"name":"isLockExists","url":"interfaces/storageadapter.html#islockexists","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"StorageAdapter"},{"id":22,"kind":2097152,"name":"ERRORS","url":"globals.html#errors","classes":"tsd-kind-object-literal"},{"id":23,"kind":32,"name":"ParseError","url":"globals.html#errors.parseerror","classes":"tsd-kind-variable tsd-parent-kind-object-literal","parent":"ERRORS"},{"id":24,"kind":32,"name":"RequestMaximumTimeoutExceededError","url":"globals.html#errors.requestmaximumtimeoutexceedederror","classes":"tsd-kind-variable tsd-parent-kind-object-literal","parent":"ERRORS"},{"id":25,"kind":32,"name":"WaitForResultError","url":"globals.html#errors.waitforresulterror","classes":"tsd-kind-variable tsd-parent-kind-object-literal","parent":"ERRORS"},{"id":26,"kind":32,"name":"OperationTimeoutError","url":"globals.html#errors.operationtimeouterror","classes":"tsd-kind-variable tsd-parent-kind-object-literal","parent":"ERRORS"},{"id":27,"kind":2097152,"name":"EXPIRES_IN","url":"globals.html#expires_in","classes":"tsd-kind-object-literal"},{"id":28,"kind":32,"name":"minute","url":"globals.html#expires_in.minute","classes":"tsd-kind-variable tsd-parent-kind-object-literal","parent":"EXPIRES_IN"},{"id":29,"kind":32,"name":"hour","url":"globals.html#expires_in.hour","classes":"tsd-kind-variable tsd-parent-kind-object-literal","parent":"EXPIRES_IN"},{"id":30,"kind":32,"name":"day","url":"globals.html#expires_in.day","classes":"tsd-kind-variable tsd-parent-kind-object-literal","parent":"EXPIRES_IN"},{"id":31,"kind":64,"name":"ParseError","url":"globals.html#parseerror","classes":"tsd-kind-function"},{"id":32,"kind":64,"name":"RequestMaximumTimeoutExceededError","url":"globals.html#requestmaximumtimeoutexceedederror","classes":"tsd-kind-function"},{"id":33,"kind":64,"name":"WaitForResultError","url":"globals.html#waitforresulterror","classes":"tsd-kind-function"},{"id":34,"kind":64,"name":"OperationTimeoutError","url":"globals.html#operationtimeouterror","classes":"tsd-kind-function"},{"id":35,"kind":64,"name":"withTimeout","url":"globals.html#withtimeout","classes":"tsd-kind-function tsd-has-type-parameter"},{"id":36,"kind":128,"name":"RedisStorageAdapter","url":"classes/redisstorageadapter.html","classes":"tsd-kind-class"},{"id":37,"kind":512,"name":"constructor","url":"classes/redisstorageadapter.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class","parent":"RedisStorageAdapter"},{"id":38,"kind":1024,"name":"options","url":"classes/redisstorageadapter.html#options","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-private","parent":"RedisStorageAdapter"},{"id":39,"kind":1024,"name":"redisInstance","url":"classes/redisstorageadapter.html#redisinstance","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-private","parent":"RedisStorageAdapter"},{"id":40,"kind":1024,"name":"connectionStatus","url":"classes/redisstorageadapter.html#connectionstatus","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-private","parent":"RedisStorageAdapter"},{"id":41,"kind":1024,"name":"withTimeout","url":"classes/redisstorageadapter.html#withtimeout","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-private","parent":"RedisStorageAdapter"},{"id":42,"kind":65536,"name":"__type","url":"classes/redisstorageadapter.html#withtimeout.__type","classes":"tsd-kind-type-literal tsd-parent-kind-property tsd-has-type-parameter","parent":"RedisStorageAdapter.withTimeout"},{"id":43,"kind":2048,"name":"getConnectionStatus","url":"classes/redisstorageadapter.html#getconnectionstatus","classes":"tsd-kind-method tsd-parent-kind-class","parent":"RedisStorageAdapter"},{"id":44,"kind":2048,"name":"onConnect","url":"classes/redisstorageadapter.html#onconnect","classes":"tsd-kind-method tsd-parent-kind-class","parent":"RedisStorageAdapter"},{"id":45,"kind":2048,"name":"set","url":"classes/redisstorageadapter.html#set","classes":"tsd-kind-method tsd-parent-kind-class","parent":"RedisStorageAdapter"},{"id":46,"kind":2048,"name":"mset","url":"classes/redisstorageadapter.html#mset","classes":"tsd-kind-method tsd-parent-kind-class","parent":"RedisStorageAdapter"},{"id":47,"kind":2048,"name":"get","url":"classes/redisstorageadapter.html#get","classes":"tsd-kind-method tsd-parent-kind-class","parent":"RedisStorageAdapter"},{"id":48,"kind":2048,"name":"mget","url":"classes/redisstorageadapter.html#mget","classes":"tsd-kind-method tsd-parent-kind-class","parent":"RedisStorageAdapter"},{"id":49,"kind":2048,"name":"addToSet","url":"classes/redisstorageadapter.html#addtoset","classes":"tsd-kind-method tsd-parent-kind-class","parent":"RedisStorageAdapter"},{"id":50,"kind":2048,"name":"deleteFromSet","url":"classes/redisstorageadapter.html#deletefromset","classes":"tsd-kind-method tsd-parent-kind-class","parent":"RedisStorageAdapter"},{"id":51,"kind":2048,"name":"intersectWithSet","url":"classes/redisstorageadapter.html#intersectwithset","classes":"tsd-kind-method tsd-parent-kind-class","parent":"RedisStorageAdapter"},{"id":52,"kind":2048,"name":"del","url":"classes/redisstorageadapter.html#del","classes":"tsd-kind-method tsd-parent-kind-class","parent":"RedisStorageAdapter"},{"id":53,"kind":2048,"name":"acquireLock","url":"classes/redisstorageadapter.html#acquirelock","classes":"tsd-kind-method tsd-parent-kind-class","parent":"RedisStorageAdapter"},{"id":54,"kind":2048,"name":"releaseLock","url":"classes/redisstorageadapter.html#releaselock","classes":"tsd-kind-method tsd-parent-kind-class","parent":"RedisStorageAdapter"},{"id":55,"kind":2048,"name":"isLockExists","url":"classes/redisstorageadapter.html#islockexists","classes":"tsd-kind-method tsd-parent-kind-class","parent":"RedisStorageAdapter"},{"id":56,"kind":2048,"name":"setConnectionStatus","url":"classes/redisstorageadapter.html#setconnectionstatus","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-private","parent":"RedisStorageAdapter"},{"id":57,"kind":32,"name":"CACHE_PREFIX","url":"globals.html#cache_prefix","classes":"tsd-kind-variable"},{"id":58,"kind":32,"name":"DEFAULT_OPERATION_TIMEOUT","url":"globals.html#default_operation_timeout","classes":"tsd-kind-variable"},{"id":59,"kind":32,"name":"DEFAULT_LOCK_EXPIRES","url":"globals.html#default_lock_expires","classes":"tsd-kind-variable"},{"id":60,"kind":4194304,"name":"RedisStorageAdapterOptions","url":"globals.html#redisstorageadapteroptions","classes":"tsd-kind-type-alias"},{"id":61,"kind":65536,"name":"__type","url":"globals.html#redisstorageadapteroptions.__type","classes":"tsd-kind-type-literal tsd-parent-kind-type-alias","parent":"RedisStorageAdapterOptions"},{"id":62,"kind":32,"name":"operationTimeout","url":"globals.html#redisstorageadapteroptions.__type.operationtimeout","classes":"tsd-kind-variable tsd-parent-kind-type-literal","parent":"RedisStorageAdapterOptions.__type"},{"id":63,"kind":32,"name":"lockExpireTimeout","url":"globals.html#redisstorageadapteroptions.__type.lockexpiretimeout","classes":"tsd-kind-variable tsd-parent-kind-type-literal","parent":"RedisStorageAdapterOptions.__type"},{"id":64,"kind":64,"name":"cacheKey","url":"globals.html#cachekey","classes":"tsd-kind-function"},{"id":65,"kind":128,"name":"RedisMock","url":"classes/redismock.html","classes":"tsd-kind-class"},{"id":66,"kind":2048,"name":"listenerCount","url":"classes/redismock.html#listenercount-1","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-inherited tsd-is-static","parent":"RedisMock"},{"id":67,"kind":1024,"name":"defaultMaxListeners","url":"classes/redismock.html#defaultmaxlisteners","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-inherited tsd-is-static","parent":"RedisMock"},{"id":68,"kind":2048,"name":"addListener","url":"classes/redismock.html#addlistener","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-overwrite tsd-is-inherited","parent":"RedisMock"},{"id":69,"kind":2048,"name":"on","url":"classes/redismock.html#on","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-overwrite tsd-is-inherited","parent":"RedisMock"},{"id":70,"kind":2048,"name":"once","url":"classes/redismock.html#once","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-overwrite tsd-is-inherited","parent":"RedisMock"},{"id":71,"kind":2048,"name":"prependListener","url":"classes/redismock.html#prependlistener","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-overwrite tsd-is-inherited","parent":"RedisMock"},{"id":72,"kind":2048,"name":"prependOnceListener","url":"classes/redismock.html#prependoncelistener","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-overwrite tsd-is-inherited","parent":"RedisMock"},{"id":73,"kind":2048,"name":"removeListener","url":"classes/redismock.html#removelistener","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-overwrite tsd-is-inherited","parent":"RedisMock"},{"id":74,"kind":2048,"name":"removeAllListeners","url":"classes/redismock.html#removealllisteners","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-overwrite tsd-is-inherited","parent":"RedisMock"},{"id":75,"kind":2048,"name":"setMaxListeners","url":"classes/redismock.html#setmaxlisteners","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-overwrite tsd-is-inherited","parent":"RedisMock"},{"id":76,"kind":2048,"name":"getMaxListeners","url":"classes/redismock.html#getmaxlisteners","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-overwrite tsd-is-inherited","parent":"RedisMock"},{"id":77,"kind":2048,"name":"listeners","url":"classes/redismock.html#listeners","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-overwrite tsd-is-inherited","parent":"RedisMock"},{"id":78,"kind":2048,"name":"emit","url":"classes/redismock.html#emit","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-overwrite tsd-is-inherited","parent":"RedisMock"},{"id":79,"kind":2048,"name":"eventNames","url":"classes/redismock.html#eventnames","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-overwrite tsd-is-inherited","parent":"RedisMock"},{"id":80,"kind":2048,"name":"listenerCount","url":"classes/redismock.html#listenercount","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-overwrite tsd-is-inherited","parent":"RedisMock"},{"id":81,"kind":32,"name":"mock","url":"globals.html#mock","classes":"tsd-kind-variable"},{"id":82,"kind":32,"name":"adapter","url":"globals.html#adapter","classes":"tsd-kind-variable"},{"id":83,"kind":128,"name":"TestStorageAdapter","url":"classes/teststorageadapter.html","classes":"tsd-kind-class"},{"id":84,"kind":1024,"name":"options","url":"classes/teststorageadapter.html#options","classes":"tsd-kind-property tsd-parent-kind-class","parent":"TestStorageAdapter"},{"id":85,"kind":1024,"name":"testInterface","url":"classes/teststorageadapter.html#testinterface","classes":"tsd-kind-property tsd-parent-kind-class","parent":"TestStorageAdapter"},{"id":86,"kind":1024,"name":"isConnected","url":"classes/teststorageadapter.html#isconnected","classes":"tsd-kind-property tsd-parent-kind-class","parent":"TestStorageAdapter"},{"id":87,"kind":1024,"name":"internalStorage","url":"classes/teststorageadapter.html#internalstorage","classes":"tsd-kind-property tsd-parent-kind-class","parent":"TestStorageAdapter"},{"id":88,"kind":512,"name":"constructor","url":"classes/teststorageadapter.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class","parent":"TestStorageAdapter"},{"id":89,"kind":2048,"name":"checkConnection","url":"classes/teststorageadapter.html#checkconnection","classes":"tsd-kind-method tsd-parent-kind-class","parent":"TestStorageAdapter"},{"id":90,"kind":2048,"name":"getConnectionStatus","url":"classes/teststorageadapter.html#getconnectionstatus","classes":"tsd-kind-method tsd-parent-kind-class","parent":"TestStorageAdapter"},{"id":91,"kind":2048,"name":"onConnect","url":"classes/teststorageadapter.html#onconnect","classes":"tsd-kind-method tsd-parent-kind-class","parent":"TestStorageAdapter"},{"id":92,"kind":2048,"name":"set","url":"classes/teststorageadapter.html#set","classes":"tsd-kind-method tsd-parent-kind-class","parent":"TestStorageAdapter"},{"id":93,"kind":2048,"name":"get","url":"classes/teststorageadapter.html#get","classes":"tsd-kind-method tsd-parent-kind-class","parent":"TestStorageAdapter"},{"id":94,"kind":2048,"name":"del","url":"classes/teststorageadapter.html#del","classes":"tsd-kind-method tsd-parent-kind-class","parent":"TestStorageAdapter"},{"id":95,"kind":2048,"name":"acquireLock","url":"classes/teststorageadapter.html#acquirelock","classes":"tsd-kind-method tsd-parent-kind-class","parent":"TestStorageAdapter"},{"id":96,"kind":2048,"name":"releaseLock","url":"classes/teststorageadapter.html#releaselock","classes":"tsd-kind-method tsd-parent-kind-class","parent":"TestStorageAdapter"},{"id":97,"kind":2048,"name":"isLockExists","url":"classes/teststorageadapter.html#islockexists","classes":"tsd-kind-method tsd-parent-kind-class","parent":"TestStorageAdapter"},{"id":98,"kind":2048,"name":"mset","url":"classes/teststorageadapter.html#mset","classes":"tsd-kind-method tsd-parent-kind-class","parent":"TestStorageAdapter"},{"id":99,"kind":2048,"name":"mget","url":"classes/teststorageadapter.html#mget","classes":"tsd-kind-method tsd-parent-kind-class","parent":"TestStorageAdapter"},{"id":100,"kind":2048,"name":"addToSet","url":"classes/teststorageadapter.html#addtoset","classes":"tsd-kind-method tsd-parent-kind-class","parent":"TestStorageAdapter"},{"id":101,"kind":2048,"name":"deleteFromSet","url":"classes/teststorageadapter.html#deletefromset","classes":"tsd-kind-method tsd-parent-kind-class","parent":"TestStorageAdapter"},{"id":102,"kind":2048,"name":"getSetValues","url":"classes/teststorageadapter.html#getsetvalues","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-private","parent":"TestStorageAdapter"},{"id":103,"kind":2048,"name":"intersectWithSet","url":"classes/teststorageadapter.html#intersectwithset","classes":"tsd-kind-method tsd-parent-kind-class","parent":"TestStorageAdapter"},{"id":104,"kind":256,"name":"LockedKeyRetrieveStrategy","url":"interfaces/lockedkeyretrievestrategy.html","classes":"tsd-kind-interface"},{"id":105,"kind":2048,"name":"getName","url":"interfaces/lockedkeyretrievestrategy.html#getname","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"LockedKeyRetrieveStrategy"},{"id":106,"kind":2048,"name":"get","url":"interfaces/lockedkeyretrievestrategy.html#get","classes":"tsd-kind-method tsd-parent-kind-interface tsd-has-type-parameter","parent":"LockedKeyRetrieveStrategy"},{"id":107,"kind":4,"name":"LockedKeyRetrieveStrategyTypes","url":"enums/lockedkeyretrievestrategytypes.html","classes":"tsd-kind-enum"},{"id":108,"kind":16,"name":"waitForResult","url":"enums/lockedkeyretrievestrategytypes.html#waitforresult","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"LockedKeyRetrieveStrategyTypes"},{"id":109,"kind":16,"name":"runExecutor","url":"enums/lockedkeyretrievestrategytypes.html#runexecutor","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"LockedKeyRetrieveStrategyTypes"},{"id":110,"kind":4194304,"name":"LockedKeyRetrieveStrategyType","url":"globals.html#lockedkeyretrievestrategytype","classes":"tsd-kind-type-alias"},{"id":111,"kind":256,"name":"Storage","url":"interfaces/storage.html","classes":"tsd-kind-interface"},{"id":112,"kind":2048,"name":"get","url":"interfaces/storage.html#get","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Storage"},{"id":113,"kind":2048,"name":"touch","url":"interfaces/storage.html#touch","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Storage"},{"id":114,"kind":2048,"name":"lockKey","url":"interfaces/storage.html#lockkey","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Storage"},{"id":115,"kind":2048,"name":"releaseKey","url":"interfaces/storage.html#releasekey","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Storage"},{"id":116,"kind":2048,"name":"keyIsLocked","url":"interfaces/storage.html#keyislocked","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Storage"},{"id":117,"kind":2048,"name":"del","url":"interfaces/storage.html#del","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Storage"},{"id":118,"kind":2048,"name":"getTags","url":"interfaces/storage.html#gettags","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Storage"},{"id":119,"kind":2048,"name":"set","url":"interfaces/storage.html#set","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Storage"},{"id":120,"kind":2048,"name":"getConnectionStatus","url":"interfaces/storage.html#getconnectionstatus","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Storage"},{"id":121,"kind":256,"name":"StorageRecordTag","url":"interfaces/storagerecordtag.html","classes":"tsd-kind-interface"},{"id":122,"kind":1024,"name":"name","url":"interfaces/storagerecordtag.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"StorageRecordTag"},{"id":123,"kind":1024,"name":"version","url":"interfaces/storagerecordtag.html#version","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"StorageRecordTag"},{"id":124,"kind":256,"name":"StorageRecord","url":"interfaces/storagerecord.html","classes":"tsd-kind-interface"},{"id":125,"kind":1024,"name":"key","url":"interfaces/storagerecord.html#key","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"StorageRecord"},{"id":126,"kind":1024,"name":"permanent","url":"interfaces/storagerecord.html#permanent","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"StorageRecord"},{"id":127,"kind":1024,"name":"expiresIn","url":"interfaces/storagerecord.html#expiresin","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"StorageRecord"},{"id":128,"kind":1024,"name":"createdAt","url":"interfaces/storagerecord.html#createdat","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"StorageRecord"},{"id":129,"kind":1024,"name":"value","url":"interfaces/storagerecord.html#value","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"StorageRecord"},{"id":130,"kind":1024,"name":"tags","url":"interfaces/storagerecord.html#tags","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"StorageRecord"},{"id":131,"kind":256,"name":"ReadOptions","url":"interfaces/readoptions.html","classes":"tsd-kind-interface"},{"id":132,"kind":1024,"name":"lockedKeyRetrieveStrategyType","url":"interfaces/readoptions.html#lockedkeyretrievestrategytype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ReadOptions"},{"id":133,"kind":256,"name":"ExpireOptions","url":"interfaces/expireoptions.html","classes":"tsd-kind-interface"},{"id":134,"kind":1024,"name":"expiresIn","url":"interfaces/expireoptions.html#expiresin","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ExpireOptions"},{"id":135,"kind":1024,"name":"permanent","url":"interfaces/expireoptions.html#permanent","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ExpireOptions"},{"id":136,"kind":256,"name":"WriteOptions","url":"interfaces/writeoptions.html","classes":"tsd-kind-interface"},{"id":137,"kind":1024,"name":"tags","url":"interfaces/writeoptions.html#tags","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"WriteOptions"},{"id":138,"kind":1024,"name":"getTags","url":"interfaces/writeoptions.html#gettags","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"WriteOptions"},{"id":139,"kind":1024,"name":"expiresIn","url":"interfaces/writeoptions.html#expiresin","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"WriteOptions"},{"id":140,"kind":1024,"name":"permanent","url":"interfaces/writeoptions.html#permanent","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"WriteOptions"},{"id":141,"kind":4194304,"name":"StorageRecordValue","url":"globals.html#storagerecordvalue","classes":"tsd-kind-type-alias"},{"id":142,"kind":4194304,"name":"StorageTags","url":"globals.html#storagetags","classes":"tsd-kind-type-alias"},{"id":143,"kind":65536,"name":"__type","url":"globals.html#storagetags.__type","classes":"tsd-kind-type-literal tsd-parent-kind-type-alias","parent":"StorageTags"},{"id":144,"kind":4194304,"name":"ReadWriteOptions","url":"globals.html#readwriteoptions","classes":"tsd-kind-type-alias"},{"id":145,"kind":256,"name":"ExecutorContext","url":"interfaces/executorcontext.html","classes":"tsd-kind-interface"},{"id":146,"kind":1024,"name":"key","url":"interfaces/executorcontext.html#key","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ExecutorContext"},{"id":147,"kind":1024,"name":"executor","url":"interfaces/executorcontext.html#executor","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ExecutorContext"},{"id":148,"kind":1024,"name":"options","url":"interfaces/executorcontext.html#options","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ExecutorContext"},{"id":149,"kind":1024,"name":"record","url":"interfaces/executorcontext.html#record","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ExecutorContext"},{"id":150,"kind":4194304,"name":"ValueOfExecutor","url":"globals.html#valueofexecutor","classes":"tsd-kind-type-alias tsd-has-type-parameter"},{"id":151,"kind":4194304,"name":"Executor","url":"globals.html#executor","classes":"tsd-kind-type-alias"},{"id":152,"kind":65536,"name":"__type","url":"globals.html#executor.__type","classes":"tsd-kind-type-literal tsd-parent-kind-type-alias","parent":"Executor"},{"id":153,"kind":64,"name":"createRecord","url":"globals.html#createrecord","classes":"tsd-kind-function"},{"id":154,"kind":256,"name":"Command","url":"interfaces/command.html","classes":"tsd-kind-interface"},{"id":155,"kind":1024,"name":"fn","url":"interfaces/command.html#fn","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Command"},{"id":156,"kind":1024,"name":"params","url":"interfaces/command.html#params","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Command"},{"id":157,"kind":128,"name":"BaseStorage","url":"classes/basestorage.html","classes":"tsd-kind-class"},{"id":158,"kind":512,"name":"constructor","url":"classes/basestorage.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class","parent":"BaseStorage"},{"id":159,"kind":1024,"name":"commandsQueue","url":"classes/basestorage.html#commandsqueue","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-private","parent":"BaseStorage"},{"id":160,"kind":1024,"name":"prefix","url":"classes/basestorage.html#prefix","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-private","parent":"BaseStorage"},{"id":161,"kind":1024,"name":"hashKeys","url":"classes/basestorage.html#hashkeys","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-private","parent":"BaseStorage"},{"id":162,"kind":1024,"name":"adapter","url":"classes/basestorage.html#adapter","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-private","parent":"BaseStorage"},{"id":163,"kind":1024,"name":"tagsAdapter","url":"classes/basestorage.html#tagsadapter","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-private","parent":"BaseStorage"},{"id":164,"kind":2048,"name":"get","url":"classes/basestorage.html#get","classes":"tsd-kind-method tsd-parent-kind-class","parent":"BaseStorage"},{"id":165,"kind":2048,"name":"setTagVersions","url":"classes/basestorage.html#settagversions","classes":"tsd-kind-method tsd-parent-kind-class","parent":"BaseStorage"},{"id":166,"kind":2048,"name":"touch","url":"classes/basestorage.html#touch","classes":"tsd-kind-method tsd-parent-kind-class","parent":"BaseStorage"},{"id":167,"kind":2048,"name":"lockKey","url":"classes/basestorage.html#lockkey","classes":"tsd-kind-method tsd-parent-kind-class","parent":"BaseStorage"},{"id":168,"kind":2048,"name":"releaseKey","url":"classes/basestorage.html#releasekey","classes":"tsd-kind-method tsd-parent-kind-class","parent":"BaseStorage"},{"id":169,"kind":2048,"name":"keyIsLocked","url":"classes/basestorage.html#keyislocked","classes":"tsd-kind-method tsd-parent-kind-class","parent":"BaseStorage"},{"id":170,"kind":2048,"name":"del","url":"classes/basestorage.html#del","classes":"tsd-kind-method tsd-parent-kind-class","parent":"BaseStorage"},{"id":171,"kind":2048,"name":"getTags","url":"classes/basestorage.html#gettags","classes":"tsd-kind-method tsd-parent-kind-class","parent":"BaseStorage"},{"id":172,"kind":2048,"name":"set","url":"classes/basestorage.html#set","classes":"tsd-kind-method tsd-parent-kind-class","parent":"BaseStorage"},{"id":173,"kind":2048,"name":"getConnectionStatus","url":"classes/basestorage.html#getconnectionstatus","classes":"tsd-kind-method tsd-parent-kind-class","parent":"BaseStorage"},{"id":174,"kind":2048,"name":"isRecord","url":"classes/basestorage.html#isrecord","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-private","parent":"BaseStorage"},{"id":175,"kind":2048,"name":"createKey","url":"classes/basestorage.html#createkey","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-private","parent":"BaseStorage"},{"id":176,"kind":2048,"name":"createTagKey","url":"classes/basestorage.html#createtagkey","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-private","parent":"BaseStorage"},{"id":177,"kind":2048,"name":"executeCommandsFromQueue","url":"classes/basestorage.html#executecommandsfromqueue","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-private","parent":"BaseStorage"},{"id":178,"kind":2048,"name":"cachedCommand","url":"classes/basestorage.html#cachedcommand","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-private","parent":"BaseStorage"},{"id":179,"kind":2048,"name":"saveNotTouchedTags","url":"classes/basestorage.html#savenottouchedtags","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-private","parent":"BaseStorage"},{"id":180,"kind":2048,"name":"getActualTags","url":"classes/basestorage.html#getactualtags","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-private","parent":"BaseStorage"},{"id":181,"kind":2048,"name":"addNotTouchedTags","url":"classes/basestorage.html#addnottouchedtags","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-private","parent":"BaseStorage"},{"id":182,"kind":2048,"name":"deleteNotTouchedTags","url":"classes/basestorage.html#deletenottouchedtags","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-private","parent":"BaseStorage"},{"id":183,"kind":2048,"name":"filterNotTouchedTags","url":"classes/basestorage.html#filternottouchedtags","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-private","parent":"BaseStorage"},{"id":184,"kind":32,"name":"TAGS_VERSIONS_ALIAS","url":"globals.html#tags_versions_alias","classes":"tsd-kind-variable"},{"id":185,"kind":32,"name":"NOT_TOUCHED_TAGS_CACHE_KEY","url":"globals.html#not_touched_tags_cache_key","classes":"tsd-kind-variable"},{"id":186,"kind":32,"name":"NON_EXISTING_TAG_VERSION","url":"globals.html#non_existing_tag_version","classes":"tsd-kind-variable"},{"id":187,"kind":4194304,"name":"BaseStorageOptions","url":"globals.html#basestorageoptions","classes":"tsd-kind-type-alias"},{"id":188,"kind":65536,"name":"__type","url":"globals.html#basestorageoptions.__type","classes":"tsd-kind-type-literal tsd-parent-kind-type-alias","parent":"BaseStorageOptions"},{"id":189,"kind":32,"name":"adapter","url":"globals.html#basestorageoptions.__type.adapter","classes":"tsd-kind-variable tsd-parent-kind-type-literal","parent":"BaseStorageOptions.__type"},{"id":190,"kind":32,"name":"tagsAdapter","url":"globals.html#basestorageoptions.__type.tagsadapter","classes":"tsd-kind-variable tsd-parent-kind-type-literal","parent":"BaseStorageOptions.__type"},{"id":191,"kind":32,"name":"prefix","url":"globals.html#basestorageoptions.__type.prefix","classes":"tsd-kind-variable tsd-parent-kind-type-literal","parent":"BaseStorageOptions.__type"},{"id":192,"kind":32,"name":"hashKeys","url":"globals.html#basestorageoptions.__type.hashkeys","classes":"tsd-kind-variable tsd-parent-kind-type-literal","parent":"BaseStorageOptions.__type"},{"id":193,"kind":32,"name":"expiresIn","url":"globals.html#basestorageoptions.__type.expiresin","classes":"tsd-kind-variable tsd-parent-kind-type-literal","parent":"BaseStorageOptions.__type"},{"id":194,"kind":4194304,"name":"CommandFn","url":"globals.html#commandfn","classes":"tsd-kind-type-alias"},{"id":195,"kind":65536,"name":"__type","url":"globals.html#commandfn.__type","classes":"tsd-kind-type-literal tsd-parent-kind-type-alias","parent":"CommandFn"},{"id":196,"kind":256,"name":"Logger","url":"interfaces/logger.html","classes":"tsd-kind-interface"},{"id":197,"kind":2048,"name":"info","url":"interfaces/logger.html#info","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Logger"},{"id":198,"kind":2048,"name":"trace","url":"interfaces/logger.html#trace","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Logger"},{"id":199,"kind":2048,"name":"warn","url":"interfaces/logger.html#warn","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Logger"},{"id":200,"kind":2048,"name":"error","url":"interfaces/logger.html#error","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Logger"},{"id":201,"kind":256,"name":"Manager","url":"interfaces/manager.html","classes":"tsd-kind-interface"},{"id":202,"kind":2048,"name":"get","url":"interfaces/manager.html#get","classes":"tsd-kind-method tsd-parent-kind-interface tsd-has-type-parameter","parent":"Manager"},{"id":203,"kind":2048,"name":"set","url":"interfaces/manager.html#set","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Manager"},{"id":204,"kind":128,"name":"WaitForResultLockedKeyRetrieveStrategy","url":"classes/waitforresultlockedkeyretrievestrategy.html","classes":"tsd-kind-class"},{"id":205,"kind":512,"name":"constructor","url":"classes/waitforresultlockedkeyretrievestrategy.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class","parent":"WaitForResultLockedKeyRetrieveStrategy"},{"id":206,"kind":1024,"name":"maximumTimeout","url":"classes/waitforresultlockedkeyretrievestrategy.html#maximumtimeout","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-private","parent":"WaitForResultLockedKeyRetrieveStrategy"},{"id":207,"kind":1024,"name":"requestTimeout","url":"classes/waitforresultlockedkeyretrievestrategy.html#requesttimeout","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-private","parent":"WaitForResultLockedKeyRetrieveStrategy"},{"id":208,"kind":1024,"name":"keyIsLocked","url":"classes/waitforresultlockedkeyretrievestrategy.html#keyislocked","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-private","parent":"WaitForResultLockedKeyRetrieveStrategy"},{"id":209,"kind":1024,"name":"getRecord","url":"classes/waitforresultlockedkeyretrievestrategy.html#getrecord","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-private","parent":"WaitForResultLockedKeyRetrieveStrategy"},{"id":210,"kind":1024,"name":"logger","url":"classes/waitforresultlockedkeyretrievestrategy.html#logger","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-private","parent":"WaitForResultLockedKeyRetrieveStrategy"},{"id":211,"kind":2048,"name":"getName","url":"classes/waitforresultlockedkeyretrievestrategy.html#getname","classes":"tsd-kind-method tsd-parent-kind-class","parent":"WaitForResultLockedKeyRetrieveStrategy"},{"id":212,"kind":2048,"name":"get","url":"classes/waitforresultlockedkeyretrievestrategy.html#get","classes":"tsd-kind-method tsd-parent-kind-class","parent":"WaitForResultLockedKeyRetrieveStrategy"},{"id":213,"kind":32,"name":"DEFAULT_MAXIMUM_TIMEOUT","url":"globals.html#default_maximum_timeout","classes":"tsd-kind-variable"},{"id":214,"kind":32,"name":"DEFAULT_REQUEST_TIMEOUT","url":"globals.html#default_request_timeout","classes":"tsd-kind-variable"},{"id":215,"kind":4194304,"name":"KeyLockCheckFn","url":"globals.html#keylockcheckfn","classes":"tsd-kind-type-alias"},{"id":216,"kind":65536,"name":"__type","url":"globals.html#keylockcheckfn.__type","classes":"tsd-kind-type-literal tsd-parent-kind-type-alias","parent":"KeyLockCheckFn"},{"id":217,"kind":4194304,"name":"GetRecordFn","url":"globals.html#getrecordfn","classes":"tsd-kind-type-alias"},{"id":218,"kind":65536,"name":"__type","url":"globals.html#getrecordfn.__type","classes":"tsd-kind-type-literal tsd-parent-kind-type-alias","parent":"GetRecordFn"},{"id":219,"kind":4194304,"name":"WaitForResultLockedKeyRetrieveStrategyOptions","url":"globals.html#waitforresultlockedkeyretrievestrategyoptions","classes":"tsd-kind-type-alias"},{"id":220,"kind":65536,"name":"__type","url":"globals.html#waitforresultlockedkeyretrievestrategyoptions.__type","classes":"tsd-kind-type-literal tsd-parent-kind-type-alias","parent":"WaitForResultLockedKeyRetrieveStrategyOptions"},{"id":221,"kind":32,"name":"maximumTimeout","url":"globals.html#waitforresultlockedkeyretrievestrategyoptions.__type.maximumtimeout","classes":"tsd-kind-variable tsd-parent-kind-type-literal","parent":"WaitForResultLockedKeyRetrieveStrategyOptions.__type"},{"id":222,"kind":32,"name":"requestTimeout","url":"globals.html#waitforresultlockedkeyretrievestrategyoptions.__type.requesttimeout","classes":"tsd-kind-variable tsd-parent-kind-type-literal","parent":"WaitForResultLockedKeyRetrieveStrategyOptions.__type"},{"id":223,"kind":32,"name":"keyLockCheckFn","url":"globals.html#waitforresultlockedkeyretrievestrategyoptions.__type.keylockcheckfn","classes":"tsd-kind-variable tsd-parent-kind-type-literal","parent":"WaitForResultLockedKeyRetrieveStrategyOptions.__type"},{"id":224,"kind":32,"name":"getRecord","url":"globals.html#waitforresultlockedkeyretrievestrategyoptions.__type.getrecord","classes":"tsd-kind-variable tsd-parent-kind-type-literal","parent":"WaitForResultLockedKeyRetrieveStrategyOptions.__type"},{"id":225,"kind":32,"name":"logger","url":"globals.html#waitforresultlockedkeyretrievestrategyoptions.__type.logger","classes":"tsd-kind-variable tsd-parent-kind-type-literal","parent":"WaitForResultLockedKeyRetrieveStrategyOptions.__type"},{"id":226,"kind":128,"name":"RunExecutorLockedKeyRetrieveStrategy","url":"classes/runexecutorlockedkeyretrievestrategy.html","classes":"tsd-kind-class"},{"id":227,"kind":2048,"name":"getName","url":"classes/runexecutorlockedkeyretrievestrategy.html#getname","classes":"tsd-kind-method tsd-parent-kind-class","parent":"RunExecutorLockedKeyRetrieveStrategy"},{"id":228,"kind":2048,"name":"get","url":"classes/runexecutorlockedkeyretrievestrategy.html#get","classes":"tsd-kind-method tsd-parent-kind-class","parent":"RunExecutorLockedKeyRetrieveStrategy"},{"id":229,"kind":256,"name":"ManagerOptions","url":"interfaces/manageroptions.html","classes":"tsd-kind-interface"},{"id":230,"kind":1024,"name":"prefix","url":"interfaces/manageroptions.html#prefix","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ManagerOptions"},{"id":231,"kind":1024,"name":"hashKeys","url":"interfaces/manageroptions.html#hashkeys","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ManagerOptions"},{"id":232,"kind":1024,"name":"logger","url":"interfaces/manageroptions.html#logger","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ManagerOptions"},{"id":233,"kind":1024,"name":"storage","url":"interfaces/manageroptions.html#storage","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ManagerOptions"},{"id":234,"kind":1024,"name":"refreshAheadFactor","url":"interfaces/manageroptions.html#refreshaheadfactor","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ManagerOptions"},{"id":235,"kind":1024,"name":"lockedKeyRetrieveStrategies","url":"interfaces/manageroptions.html#lockedkeyretrievestrategies","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ManagerOptions"},{"id":236,"kind":1024,"name":"expiresIn","url":"interfaces/manageroptions.html#expiresin","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"ManagerOptions"},{"id":237,"kind":1024,"name":"permanent","url":"interfaces/manageroptions.html#permanent","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"ManagerOptions"},{"id":238,"kind":128,"name":"BaseManager","url":"classes/basemanager.html","classes":"tsd-kind-class"},{"id":239,"kind":512,"name":"constructor","url":"classes/basemanager.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class","parent":"BaseManager"},{"id":240,"kind":1024,"name":"storage","url":"classes/basemanager.html#storage","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-protected","parent":"BaseManager"},{"id":241,"kind":1024,"name":"lockedKeyRetrieveStrategies","url":"classes/basemanager.html#lockedkeyretrievestrategies","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-protected","parent":"BaseManager"},{"id":242,"kind":1024,"name":"logger","url":"classes/basemanager.html#logger","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-protected","parent":"BaseManager"},{"id":243,"kind":2048,"name":"get","url":"classes/basemanager.html#get","classes":"tsd-kind-method tsd-parent-kind-class tsd-has-type-parameter","parent":"BaseManager"},{"id":244,"kind":2048,"name":"set","url":"classes/basemanager.html#set","classes":"tsd-kind-method tsd-parent-kind-class","parent":"BaseManager"},{"id":245,"kind":2048,"name":"isTagsOutdated","url":"classes/basemanager.html#istagsoutdated","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-protected","parent":"BaseManager"},{"id":246,"kind":2048,"name":"updateCacheAndGetResult","url":"classes/basemanager.html#updatecacheandgetresult","classes":"tsd-kind-method tsd-parent-kind-class tsd-has-type-parameter tsd-is-protected","parent":"BaseManager"},{"id":247,"kind":2048,"name":"getLockedKeyRetrieveStrategy","url":"classes/basemanager.html#getlockedkeyretrievestrategy","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-protected","parent":"BaseManager"},{"id":248,"kind":64,"name":"createLogger","url":"globals.html#createlogger","classes":"tsd-kind-function"},{"id":249,"kind":256,"name":"RefreshAheadManagerOptions","url":"interfaces/refreshaheadmanageroptions.html","classes":"tsd-kind-interface"},{"id":250,"kind":1024,"name":"refreshAheadFactor","url":"interfaces/refreshaheadmanageroptions.html#refreshaheadfactor","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite","parent":"RefreshAheadManagerOptions"},{"id":251,"kind":1024,"name":"prefix","url":"interfaces/refreshaheadmanageroptions.html#prefix","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RefreshAheadManagerOptions"},{"id":252,"kind":1024,"name":"hashKeys","url":"interfaces/refreshaheadmanageroptions.html#hashkeys","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RefreshAheadManagerOptions"},{"id":253,"kind":1024,"name":"logger","url":"interfaces/refreshaheadmanageroptions.html#logger","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RefreshAheadManagerOptions"},{"id":254,"kind":1024,"name":"storage","url":"interfaces/refreshaheadmanageroptions.html#storage","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RefreshAheadManagerOptions"},{"id":255,"kind":1024,"name":"lockedKeyRetrieveStrategies","url":"interfaces/refreshaheadmanageroptions.html#lockedkeyretrievestrategies","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RefreshAheadManagerOptions"},{"id":256,"kind":1024,"name":"expiresIn","url":"interfaces/refreshaheadmanageroptions.html#expiresin","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RefreshAheadManagerOptions"},{"id":257,"kind":1024,"name":"permanent","url":"interfaces/refreshaheadmanageroptions.html#permanent","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RefreshAheadManagerOptions"},{"id":258,"kind":128,"name":"RefreshAheadManager","url":"classes/refreshaheadmanager.html","classes":"tsd-kind-class"},{"id":259,"kind":2048,"name":"getName","url":"classes/refreshaheadmanager.html#getname","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-static","parent":"RefreshAheadManager"},{"id":260,"kind":512,"name":"constructor","url":"classes/refreshaheadmanager.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class tsd-is-overwrite","parent":"RefreshAheadManager"},{"id":261,"kind":1024,"name":"refreshAheadFactor","url":"classes/refreshaheadmanager.html#refreshaheadfactor","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-private","parent":"RefreshAheadManager"},{"id":262,"kind":2048,"name":"get","url":"classes/refreshaheadmanager.html#get","classes":"tsd-kind-method tsd-parent-kind-class tsd-has-type-parameter tsd-is-overwrite","parent":"RefreshAheadManager"},{"id":263,"kind":2048,"name":"set","url":"classes/refreshaheadmanager.html#set","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-overwrite","parent":"RefreshAheadManager"},{"id":264,"kind":2048,"name":"isRecordValid","url":"classes/refreshaheadmanager.html#isrecordvalid","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-private","parent":"RefreshAheadManager"},{"id":265,"kind":2048,"name":"isRecordExpireSoon","url":"classes/refreshaheadmanager.html#isrecordexpiresoon","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-private","parent":"RefreshAheadManager"},{"id":266,"kind":2048,"name":"refresh","url":"classes/refreshaheadmanager.html#refresh","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-private","parent":"RefreshAheadManager"},{"id":267,"kind":1024,"name":"storage","url":"classes/refreshaheadmanager.html#storage","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-inherited tsd-is-protected","parent":"RefreshAheadManager"},{"id":268,"kind":1024,"name":"lockedKeyRetrieveStrategies","url":"classes/refreshaheadmanager.html#lockedkeyretrievestrategies","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-inherited tsd-is-protected","parent":"RefreshAheadManager"},{"id":269,"kind":1024,"name":"logger","url":"classes/refreshaheadmanager.html#logger","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-inherited tsd-is-protected","parent":"RefreshAheadManager"},{"id":270,"kind":2048,"name":"isTagsOutdated","url":"classes/refreshaheadmanager.html#istagsoutdated","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-inherited tsd-is-protected","parent":"RefreshAheadManager"},{"id":271,"kind":2048,"name":"updateCacheAndGetResult","url":"classes/refreshaheadmanager.html#updatecacheandgetresult","classes":"tsd-kind-method tsd-parent-kind-class tsd-has-type-parameter tsd-is-inherited tsd-is-protected","parent":"RefreshAheadManager"},{"id":272,"kind":2048,"name":"getLockedKeyRetrieveStrategy","url":"classes/refreshaheadmanager.html#getlockedkeyretrievestrategy","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-inherited tsd-is-protected","parent":"RefreshAheadManager"},{"id":273,"kind":32,"name":"DEFAULT_REFRESH_AHEAD_FACTOR","url":"globals.html#default_refresh_ahead_factor","classes":"tsd-kind-variable"},{"id":274,"kind":256,"name":"CacheWithCustomStorageOptions","url":"interfaces/cachewithcustomstorageoptions.html","classes":"tsd-kind-interface"},{"id":275,"kind":1024,"name":"storage","url":"interfaces/cachewithcustomstorageoptions.html#storage","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"CacheWithCustomStorageOptions"},{"id":276,"kind":256,"name":"CacheWithBaseStorageOptions","url":"interfaces/cachewithbasestorageoptions.html","classes":"tsd-kind-interface"},{"id":277,"kind":1024,"name":"adapter","url":"interfaces/cachewithbasestorageoptions.html#adapter","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"CacheWithBaseStorageOptions"},{"id":278,"kind":1024,"name":"tagsAdapter","url":"interfaces/cachewithbasestorageoptions.html#tagsadapter","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"CacheWithBaseStorageOptions"},{"id":279,"kind":256,"name":"ManagerConstructor","url":"interfaces/managerconstructor.html","classes":"tsd-kind-interface tsd-has-type-parameter"},{"id":280,"kind":512,"name":"constructor","url":"interfaces/managerconstructor.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-interface","parent":"ManagerConstructor"},{"id":281,"kind":2048,"name":"getName","url":"interfaces/managerconstructor.html#getname","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"ManagerConstructor"},{"id":282,"kind":256,"name":"ManagerSelectorOptions","url":"interfaces/managerselectoroptions.html","classes":"tsd-kind-interface"},{"id":283,"kind":1024,"name":"manager","url":"interfaces/managerselectoroptions.html#manager","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ManagerSelectorOptions"},{"id":284,"kind":128,"name":"Cache","url":"classes/cache.html","classes":"tsd-kind-class"},{"id":285,"kind":512,"name":"constructor","url":"classes/cache.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class","parent":"Cache"},{"id":286,"kind":1024,"name":"storage","url":"classes/cache.html#storage","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-private","parent":"Cache"},{"id":287,"kind":1024,"name":"logger","url":"classes/cache.html#logger","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-private","parent":"Cache"},{"id":288,"kind":1024,"name":"expiresIn","url":"classes/cache.html#expiresin","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-private","parent":"Cache"},{"id":289,"kind":1024,"name":"managers","url":"classes/cache.html#managers","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-private","parent":"Cache"},{"id":290,"kind":2048,"name":"get","url":"classes/cache.html#get","classes":"tsd-kind-method tsd-parent-kind-class tsd-has-type-parameter","parent":"Cache"},{"id":291,"kind":2048,"name":"set","url":"classes/cache.html#set","classes":"tsd-kind-method tsd-parent-kind-class","parent":"Cache"},{"id":292,"kind":2048,"name":"touch","url":"classes/cache.html#touch","classes":"tsd-kind-method tsd-parent-kind-class","parent":"Cache"},{"id":293,"kind":2048,"name":"registerManager","url":"classes/cache.html#registermanager","classes":"tsd-kind-method tsd-parent-kind-class","parent":"Cache"},{"id":294,"kind":2048,"name":"getManager","url":"classes/cache.html#getmanager","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-private","parent":"Cache"},{"id":295,"kind":4194304,"name":"CacheOptions","url":"globals.html#cacheoptions","classes":"tsd-kind-type-alias"},{"id":296,"kind":64,"name":"isCustomStorageOptions","url":"globals.html#iscustomstorageoptions","classes":"tsd-kind-function"},{"id":297,"kind":64,"name":"isBaseStorageOptions","url":"globals.html#isbasestorageoptions","classes":"tsd-kind-function"},{"id":298,"kind":128,"name":"TestStorage","url":"classes/teststorage.html","classes":"tsd-kind-class"},{"id":299,"kind":1024,"name":"storage","url":"classes/teststorage.html#storage","classes":"tsd-kind-property tsd-parent-kind-class","parent":"TestStorage"},{"id":300,"kind":1024,"name":"get","url":"classes/teststorage.html#get","classes":"tsd-kind-property tsd-parent-kind-class","parent":"TestStorage"},{"id":301,"kind":1024,"name":"touch","url":"classes/teststorage.html#touch","classes":"tsd-kind-property tsd-parent-kind-class","parent":"TestStorage"},{"id":302,"kind":1024,"name":"lockKey","url":"classes/teststorage.html#lockkey","classes":"tsd-kind-property tsd-parent-kind-class","parent":"TestStorage"},{"id":303,"kind":1024,"name":"releaseKey","url":"classes/teststorage.html#releasekey","classes":"tsd-kind-property tsd-parent-kind-class","parent":"TestStorage"},{"id":304,"kind":1024,"name":"keyIsLocked","url":"classes/teststorage.html#keyislocked","classes":"tsd-kind-property tsd-parent-kind-class","parent":"TestStorage"},{"id":305,"kind":1024,"name":"del","url":"classes/teststorage.html#del","classes":"tsd-kind-property tsd-parent-kind-class","parent":"TestStorage"},{"id":306,"kind":1024,"name":"getTags","url":"classes/teststorage.html#gettags","classes":"tsd-kind-property tsd-parent-kind-class","parent":"TestStorage"},{"id":307,"kind":1024,"name":"set","url":"classes/teststorage.html#set","classes":"tsd-kind-property tsd-parent-kind-class","parent":"TestStorage"},{"id":308,"kind":1024,"name":"getConnectionStatus","url":"classes/teststorage.html#getconnectionstatus","classes":"tsd-kind-property tsd-parent-kind-class","parent":"TestStorage"},{"id":309,"kind":512,"name":"constructor","url":"classes/teststorage.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class","parent":"TestStorage"},{"id":310,"kind":2097152,"name":"logger","url":"globals.html#logger","classes":"tsd-kind-object-literal"},{"id":311,"kind":32,"name":"info","url":"globals.html#logger.info","classes":"tsd-kind-variable tsd-parent-kind-object-literal","parent":"logger"},{"id":312,"kind":32,"name":"trace","url":"globals.html#logger.trace","classes":"tsd-kind-variable tsd-parent-kind-object-literal","parent":"logger"},{"id":313,"kind":32,"name":"warn","url":"globals.html#logger.warn","classes":"tsd-kind-variable tsd-parent-kind-object-literal","parent":"logger"},{"id":314,"kind":32,"name":"error","url":"globals.html#logger.error","classes":"tsd-kind-variable tsd-parent-kind-object-literal","parent":"logger"},{"id":315,"kind":32,"name":"mockManager","url":"globals.html#mockmanager","classes":"tsd-kind-variable"},{"id":316,"kind":32,"name":"instance","url":"globals.html#instance","classes":"tsd-kind-variable"},{"id":317,"kind":128,"name":"ReadThroughManager","url":"classes/readthroughmanager.html","classes":"tsd-kind-class"},{"id":318,"kind":2048,"name":"getName","url":"classes/readthroughmanager.html#getname","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-static","parent":"ReadThroughManager"},{"id":319,"kind":512,"name":"constructor","url":"classes/readthroughmanager.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class tsd-is-overwrite","parent":"ReadThroughManager"},{"id":320,"kind":2048,"name":"get","url":"classes/readthroughmanager.html#get","classes":"tsd-kind-method tsd-parent-kind-class tsd-has-type-parameter tsd-is-overwrite","parent":"ReadThroughManager"},{"id":321,"kind":2048,"name":"set","url":"classes/readthroughmanager.html#set","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-overwrite","parent":"ReadThroughManager"},{"id":322,"kind":2048,"name":"isRecordValid","url":"classes/readthroughmanager.html#isrecordvalid","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-private","parent":"ReadThroughManager"},{"id":323,"kind":1024,"name":"storage","url":"classes/readthroughmanager.html#storage","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-inherited tsd-is-protected","parent":"ReadThroughManager"},{"id":324,"kind":1024,"name":"lockedKeyRetrieveStrategies","url":"classes/readthroughmanager.html#lockedkeyretrievestrategies","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-inherited tsd-is-protected","parent":"ReadThroughManager"},{"id":325,"kind":1024,"name":"logger","url":"classes/readthroughmanager.html#logger","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-inherited tsd-is-protected","parent":"ReadThroughManager"},{"id":326,"kind":2048,"name":"isTagsOutdated","url":"classes/readthroughmanager.html#istagsoutdated","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-inherited tsd-is-protected","parent":"ReadThroughManager"},{"id":327,"kind":2048,"name":"updateCacheAndGetResult","url":"classes/readthroughmanager.html#updatecacheandgetresult","classes":"tsd-kind-method tsd-parent-kind-class tsd-has-type-parameter tsd-is-inherited tsd-is-protected","parent":"ReadThroughManager"},{"id":328,"kind":2048,"name":"getLockedKeyRetrieveStrategy","url":"classes/readthroughmanager.html#getlockedkeyretrievestrategy","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-inherited tsd-is-protected","parent":"ReadThroughManager"},{"id":329,"kind":128,"name":"WriteThroughManager","url":"classes/writethroughmanager.html","classes":"tsd-kind-class"},{"id":330,"kind":2048,"name":"getName","url":"classes/writethroughmanager.html#getname","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-static","parent":"WriteThroughManager"},{"id":331,"kind":512,"name":"constructor","url":"classes/writethroughmanager.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class tsd-is-overwrite","parent":"WriteThroughManager"},{"id":332,"kind":2048,"name":"get","url":"classes/writethroughmanager.html#get","classes":"tsd-kind-method tsd-parent-kind-class tsd-has-type-parameter tsd-is-overwrite","parent":"WriteThroughManager"},{"id":333,"kind":2048,"name":"set","url":"classes/writethroughmanager.html#set","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-overwrite","parent":"WriteThroughManager"},{"id":334,"kind":2048,"name":"isRecordValid","url":"classes/writethroughmanager.html#isrecordvalid","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-private","parent":"WriteThroughManager"},{"id":335,"kind":1024,"name":"storage","url":"classes/writethroughmanager.html#storage","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-inherited tsd-is-protected","parent":"WriteThroughManager"},{"id":336,"kind":1024,"name":"lockedKeyRetrieveStrategies","url":"classes/writethroughmanager.html#lockedkeyretrievestrategies","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-inherited tsd-is-protected","parent":"WriteThroughManager"},{"id":337,"kind":1024,"name":"logger","url":"classes/writethroughmanager.html#logger","classes":"tsd-kind-property tsd-parent-kind-class tsd-is-inherited tsd-is-protected","parent":"WriteThroughManager"},{"id":338,"kind":2048,"name":"isTagsOutdated","url":"classes/writethroughmanager.html#istagsoutdated","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-inherited tsd-is-protected","parent":"WriteThroughManager"},{"id":339,"kind":2048,"name":"updateCacheAndGetResult","url":"classes/writethroughmanager.html#updatecacheandgetresult","classes":"tsd-kind-method tsd-parent-kind-class tsd-has-type-parameter tsd-is-inherited tsd-is-protected","parent":"WriteThroughManager"},{"id":340,"kind":2048,"name":"getLockedKeyRetrieveStrategy","url":"classes/writethroughmanager.html#getlockedkeyretrievestrategy","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-inherited tsd-is-protected","parent":"WriteThroughManager"},{"id":341,"kind":2097152,"name":"loggerMock","url":"globals.html#loggermock","classes":"tsd-kind-object-literal"},{"id":342,"kind":32,"name":"error","url":"globals.html#loggermock.error","classes":"tsd-kind-variable tsd-parent-kind-object-literal","parent":"loggerMock"},{"id":343,"kind":32,"name":"getRecordMock","url":"globals.html#getrecordmock","classes":"tsd-kind-variable"},{"id":344,"kind":32,"name":"keyLockCheckFnMock","url":"globals.html#keylockcheckfnmock","classes":"tsd-kind-variable"},{"id":345,"kind":32,"name":"internalStorage","url":"globals.html#internalstorage","classes":"tsd-kind-variable"},{"id":346,"kind":32,"name":"storage","url":"globals.html#storage","classes":"tsd-kind-variable"},{"id":347,"kind":32,"name":"manager","url":"globals.html#manager","classes":"tsd-kind-variable"},{"id":348,"kind":65536,"name":"__type","url":"globals.html#internalstorage.__type","classes":"tsd-kind-type-literal tsd-parent-kind-variable","parent":"internalStorage"},{"id":349,"kind":1024,"name":"storage","url":"classes/basestorage.html#storage","classes":"tsd-kind-property tsd-parent-kind-class","parent":"BaseStorage"},{"id":350,"kind":2097152,"name":"testInterface","url":"globals.html#testinterface","classes":"tsd-kind-object-literal"},{"id":351,"kind":32,"name":"internalStorage","url":"globals.html#testinterface.internalstorage","classes":"tsd-kind-variable tsd-parent-kind-object-literal","parent":"testInterface"},{"id":352,"kind":65536,"name":"__type","url":"globals.html#testinterface.internalstorage.__type","classes":"tsd-kind-type-literal tsd-parent-kind-variable","parent":"testInterface.internalStorage"},{"id":353,"kind":32,"name":"testAdapter","url":"globals.html#testadapter","classes":"tsd-kind-variable"}]}; \ No newline at end of file diff --git a/docs/api/classes/basemanager.html b/docs/api/classes/basemanager.html index b5d511e..d4b4e32 100644 --- a/docs/api/classes/basemanager.html +++ b/docs/api/classes/basemanager.html @@ -134,7 +134,7 @@

    constructor

  • Parameters

    @@ -156,7 +156,7 @@

    Protected lockedKey
    lockedKeyRetrieveStrategies: Map<string, LockedKeyRetrieveStrategy>
    @@ -166,7 +166,7 @@

    Protected logger

    logger: Logger
    @@ -176,7 +176,7 @@

    Protected storage

    storage: Storage
    @@ -194,7 +194,7 @@

    Abstract get

    Type parameters

    @@ -229,13 +229,13 @@

    Protected getLocked
  • Parameters

    • -
      Default value strategyName: string = LockedKeyRetrieveStrategyTypes.runExecutor
      +
      Default value strategyName: string = LockedKeyRetrieveStrategyTypes.runExecutor

    Returns LockedKeyRetrieveStrategy

    @@ -252,7 +252,7 @@

    Protected isTagsOut
  • Parameters

    @@ -272,14 +272,14 @@

    Returns boolean

    Abstract set

    +
    + +

    Private filterNotTouchedTags

    +
      +
    • filterNotTouchedTags(tags: string[]): Promise<Set<string>>
    • +
    +
      +
    • + +
      +
      +

      Filter specified tags with not touched tags special set. + In other words it returns intersection of specified tags and special tags set in storage.

      +
      +
      +

      Parameters

      +
        +
      • +
        tags: string[]
        +
      • +
      +

      Returns Promise<Set<string>>

      +
    • +
    +

    get

    @@ -340,9 +490,15 @@

    get

    +
    +
    +

    Gets a record using an adapter. It is expected that the adapter returns or null (value not found) + or serialized StorageRecord.

    +
    +

    Parameters

    • @@ -353,6 +509,35 @@

      Returns Promise

    +
    + +

    Private getActualTags

    + +
      +
    • + +
      +
      +

      Gets actual tags from storage. + It only searches tags stored as separate records.

      +
      +
      +

      Parameters

      +
        +
      • +
        tagNames: string[]
        +
      • +
      +

      Returns Promise<StorageRecordTag[]>

      +
    • +
    +

    getConnectionStatus

    @@ -364,9 +549,14 @@

    getConnectionStatus

    +
    +
    +

    Returns current connection status of storage.

    +
    +

    Returns ConnectionStatus

  • @@ -382,9 +572,17 @@

    getTags

    +
    +
    +

    Retrieves actual versions of tags from storage. + Optimization used: first filter tag names with not touched tags set. + Tags which was not found in storage will be created with 0 version.

    +
    +

    See diagram

    +

    Parameters

    @@ -220,45 +221,41 @@
    Optional tagsAdapter

    CacheOptions

    - +
    CacheOptions: CacheWithCustomStorageOptions | CacheWithBaseStorageOptions & { expiresIn?: undefined | number; hashKeys?: undefined | false | true; logger: Logger; prefix?: undefined | string }
    - -
    - -

    CommandArgument

    -
    CommandArgument: string | number
    -

    CommandFn

    -
    CommandFn: function
    +
    CommandFn: (...args: any[]) => any
    +
    +
    +

    CommandFn is a function (usually a Storage method bind to its context) which is stored in + Command object for further execution.

    +
    +

    Type declaration

    @@ -383,27 +374,27 @@

    ReadWriteOptions

    ReadWriteOptions: ReadOptions & WriteOptions

    RedisStorageAdapterOptions

    -
    RedisStorageAdapterOptions: object
    +
    RedisStorageAdapterOptions: { lockExpireTimeout?: undefined | number; operationTimeout?: undefined | number }

    Type declaration

    • -
      Optional lockExpireTimeout: undefined | number
      +
      Optional lockExpireTimeout?: undefined | number
    • -
      Optional operationTimeout: undefined | number
      +
      Optional operationTimeout?: undefined | number
    @@ -414,17 +405,17 @@

    StorageRecordValue

    StorageRecordValue: object | string | number | null

    StorageTags

    -
    StorageTags: object
    +
    StorageTags: {}
    @@ -439,10 +430,10 @@
    [tagName:

    ValueOfExecutor

    -
    ValueOfExecutor<V>: ValueOfExecutor<V>
    +
    ValueOfExecutor<V>: ReturnType<V> extends Promise<infer RT> ? RT : V

    Type parameters

    @@ -455,10 +446,10 @@

    V:

    WaitForResultLockedKeyRetrieveStrategyOptions

    -
    WaitForResultLockedKeyRetrieveStrategyOptions: object
    +
    WaitForResultLockedKeyRetrieveStrategyOptions: { getRecord: GetRecordFn; keyLockCheckFn: KeyLockCheckFn; logger: Logger; maximumTimeout?: undefined | number; requestTimeout?: undefined | number }
    @@ -474,10 +465,10 @@
    keyLockCheckFn: logger: Logger
  • -
    Optional maximumTimeout: undefined | number
    +
    Optional maximumTimeout?: undefined | number
  • -
    Optional requestTimeout: undefined | number
    +
    Optional requestTimeout?: undefined | number
  • @@ -488,114 +479,139 @@

    Variables

    Const CACHE_PREFIX

    -
    CACHE_PREFIX: "cache" = "cache"
    +
    CACHE_PREFIX: "cache" = "cache"
    +
    +
    +

    Hash prefix, used in set, get commands

    +
    +

    Const DEFAULT_LOCK_EXPIRES

    -
    DEFAULT_LOCK_EXPIRES: 20000 = 20000
    +
    DEFAULT_LOCK_EXPIRES: 20000 = 20000

    Const DEFAULT_MAXIMUM_TIMEOUT

    -
    DEFAULT_MAXIMUM_TIMEOUT: 3000 = 3000
    +
    DEFAULT_MAXIMUM_TIMEOUT: 3000 = 3000

    Const DEFAULT_OPERATION_TIMEOUT

    -
    DEFAULT_OPERATION_TIMEOUT: 150 = 150
    +
    DEFAULT_OPERATION_TIMEOUT: 150 = 150

    Const DEFAULT_REFRESH_AHEAD_FACTOR

    -
    DEFAULT_REFRESH_AHEAD_FACTOR: 0.8 = 0.8
    +
    DEFAULT_REFRESH_AHEAD_FACTOR: 0.8 = 0.8

    Const DEFAULT_REQUEST_TIMEOUT

    -
    DEFAULT_REQUEST_TIMEOUT: 250 = 250
    +
    DEFAULT_REQUEST_TIMEOUT: 250 = 250
    + +
    +
    + +

    Const NON_EXISTING_TAG_VERSION

    +
    NON_EXISTING_TAG_VERSION: 0 = 0
    + +
    +
    + +

    Const NOT_TOUCHED_TAGS_CACHE_KEY

    +
    NOT_TOUCHED_TAGS_CACHE_KEY: "not-touched-tags" = "not-touched-tags"

    Const TAGS_VERSIONS_ALIAS

    -
    TAGS_VERSIONS_ALIAS: "cache-tags-versions" = "cache-tags-versions"
    +
    TAGS_VERSIONS_ALIAS: "cache-tags-versions" = "cache-tags-versions"
    -
    +

    Let adapter

    -
    adapter: RedisStorageAdapter = new RedisStorageAdapter(mock)
    +
    adapter: RedisStorageAdapter = new RedisStorageAdapter(mock)
    -
    +

    Const getRecordMock

    -
    getRecordMock: Mock<any, any> = jest.fn()
    +
    getRecordMock: Mock<any, any> = jest.fn()
    -
    +

    Let instance

    instance: any
    -
    +

    Let internalStorage

    -
    internalStorage: object
    +
    internalStorage: {}
    @@ -604,68 +620,68 @@

    Type declaration

    -
    +

    Const keyLockCheckFnMock

    -
    keyLockCheckFnMock: Mock<any, any> = jest.fn()
    +
    keyLockCheckFnMock: Mock<any, any> = jest.fn()
    -
    +

    Let manager

    manager: any
    -
    +

    Let mock

    -
    mock: RedisMock = new RedisMock()
    +
    mock: RedisMock = new RedisMock()
    -
    +

    Const mockManager

    -
    mockManager: mockManager = class {static getName: any = () => 'mock';get: any = jest.fn().mockResolvedValue('mockResult');set: any = jest.fn();}
    +
    mockManager: mockManager = class {static getName: any = () => 'mock';get: any = jest.fn().mockResolvedValue('mockResult');set: any = jest.fn();}
    -
    +

    Let storage

    storage: any
    -
    +

    Let testAdapter

    testAdapter: any
    @@ -682,7 +698,7 @@

    OperationTimeoutError

  • Parameters

    @@ -705,7 +721,7 @@

    ParseError

  • Parameters

    @@ -722,13 +738,13 @@

    Returns Error

    RequestMaximumTimeoutExceededError

      -
    • RequestMaximumTimeoutExceededError(maxTimeout: number, error: Error): Error
    • +
    • RequestMaximumTimeoutExceededError(maxTimeout: number, error?: Error): Error
    • Parameters

      @@ -748,13 +764,13 @@

      Returns Error

      WaitForResultError

        -
      • WaitForResultError(error: Error): Error
      • +
      • WaitForResultError(error?: Error): Error

  • +
    + +

    cacheKey

    +
      +
    • cacheKey(key: string): string
    • +
    + +

    createLogger

    @@ -777,7 +816,7 @@

    createLogger

  • Parameters

    @@ -803,7 +842,7 @@

    createRecord

  • Parameters

    @@ -818,7 +857,7 @@
    value:
    tags: StorageRecordTag[]
  • -
    Default value options: WriteOptions = {}
    +
    Default value options: WriteOptions = {}
  • Returns StorageRecord

    @@ -829,28 +868,22 @@

    Returns

    default

      -
    • default(name: string, message: string, payload?: any): Error
    • +
    • default(value: any): string
    • Parameters

      • -
        name: string
        -
      • -
      • -
        message: string
        -
      • -
      • -
        Default value payload: any = {}
        +
        value: any
      -

      Returns Error

      +

      Returns string

    @@ -858,13 +891,13 @@

    Returns Error

    Const isBaseStorageOptions

      -
    • isBaseStorageOptions(options: any): boolean
    • +
    • isBaseStorageOptions(options: any): options is CacheWithBaseStorageOptions
    -

    Returns boolean

    +

    Returns options is CacheWithBaseStorageOptions

  • @@ -881,13 +914,13 @@

    Returns boolean

    Const isCustomStorageOptions

      -
    • isCustomStorageOptions(options: any): boolean
    • +
    • isCustomStorageOptions(options: any): options is CacheWithCustomStorageOptions
    -

    Returns boolean

    +

    Returns options is CacheWithCustomStorageOptions

    -
    +

    Const withTimeout

    -
      -
    • withTimeout(promise: Promise<any>, timeout: number): Promise<any>
    • +
        +
      • withTimeout<T>(promise: Promise<T>, timeout: number): Promise<T>
      • +

        Type parameters

        +
          +
        • +

          T

          +
        • +

        Parameters

        • -
          promise: Promise<any>
          +
          promise: Promise<T>
        • timeout: number
        -

        Returns Promise<any>

        +

        Returns Promise<T>

    @@ -935,46 +974,46 @@

    Const ERRORS

    ERRORS: object

    OperationTimeoutError

    -
    OperationTimeoutError: string = "OperationTimeoutError"
    +
    OperationTimeoutError: string = "OperationTimeoutError"

    ParseError

    -
    ParseError: string = "ParseError"
    +
    ParseError: string = "ParseError"

    RequestMaximumTimeoutExceededError

    -
    RequestMaximumTimeoutExceededError: string = "RequestMaximumTimeoutExceededError"
    +
    RequestMaximumTimeoutExceededError: string = "RequestMaximumTimeoutExceededError"

    WaitForResultError

    -
    WaitForResultError: string = "WaitForResultError"
    +
    WaitForResultError: string = "WaitForResultError"
    @@ -985,141 +1024,141 @@

    Const EXPIRES_IN

    EXPIRES_IN: object

    day

    -
    day: number = 86400000
    +
    day: number = 86400000

    hour

    -
    hour: number = 3600000
    +
    hour: number = 3600000

    minute

    -
    minute: number = 60000
    +
    minute: number = 60000
    -
    +

    Const logger

    logger: object
    -
    +

    error

    -
    error: Mock<any, any> = jest.fn()
    +
    error: Mock<any, any> = jest.fn()
    -
    +

    info

    -
    info: Mock<any, any> = jest.fn()
    +
    info: Mock<any, any> = jest.fn()
    -
    +

    trace

    -
    trace: Mock<any, any> = jest.fn()
    +
    trace: Mock<any, any> = jest.fn()
    -
    +

    warn

    -
    warn: Mock<any, any> = jest.fn()
    +
    warn: Mock<any, any> = jest.fn()
    -
    +

    Const loggerMock

    loggerMock: object
    -
    +

    error

    -
    error: Mock<any, any> = jest.fn()
    +
    error: Mock<any, any> = jest.fn()
    -
    +

    Const testInterface

    testInterface: object
    -
    +

    internalStorage

    -
    internalStorage: object
    +
    internalStorage: {}
    @@ -1159,7 +1198,7 @@

    Type declaration

  • ReadThroughManager
  • -
  • +
  • RedisMock
  • @@ -1219,9 +1258,6 @@

    Type declaration

  • ReadOptions
  • -
  • - RecordErrorContext -
  • RefreshAheadManagerOptions
  • @@ -1249,9 +1285,6 @@

    Type declaration

  • CacheOptions
  • -
  • - CommandArgument -
  • CommandFn
  • @@ -1303,37 +1336,43 @@

    Type declaration

  • DEFAULT_REQUEST_TIMEOUT
  • +
  • + NON_EXISTING_TAG_VERSION +
  • +
  • + NOT_TOUCHED_TAGS_CACHE_KEY +
  • TAGS_VERSIONS_ALIAS
  • -
  • +
  • adapter
  • -
  • +
  • getRecordMock
  • -
  • +
  • instance
  • -
  • +
  • internalStorage
  • -
  • +
  • keyLockCheckFnMock
  • -
  • +
  • manager
  • -
  • +
  • mock
  • -
  • +
  • mockManager
  • -
  • +
  • storage
  • -
  • +
  • testAdapter
  • @@ -1348,6 +1387,9 @@

    Type declaration

  • WaitForResultError
  • +
  • + cacheKey +
  • createLogger
  • @@ -1363,7 +1405,7 @@

    Type declaration

  • isCustomStorageOptions
  • -
  • +
  • withTimeout
  • @@ -1372,13 +1414,13 @@

    Type declaration

  • EXPIRES_IN
  • -
  • +
  • logger
  • -
  • +
  • loggerMock
  • -
  • +
  • testInterface
  • diff --git a/docs/api/index.html b/docs/api/index.html index b59faa8..c38dd37 100644 --- a/docs/api/index.html +++ b/docs/api/index.html @@ -56,7 +56,7 @@ Globals -

    cachalot

    +

    cachalot

    @@ -87,9 +87,11 @@

    Getting started

    @@ -106,7 +106,7 @@

    Optional tagsAdapter

    tagsAdapter: StorageAdapter
    diff --git a/docs/api/interfaces/cachewithcustomstorageoptions.html b/docs/api/interfaces/cachewithcustomstorageoptions.html index e06149b..40cba91 100644 --- a/docs/api/interfaces/cachewithcustomstorageoptions.html +++ b/docs/api/interfaces/cachewithcustomstorageoptions.html @@ -95,7 +95,7 @@

    storage

    storage: Storage
    diff --git a/docs/api/interfaces/command.html b/docs/api/interfaces/command.html index c872edf..e374451 100644 --- a/docs/api/interfaces/command.html +++ b/docs/api/interfaces/command.html @@ -66,6 +66,15 @@

    Interface Command

    +
    +
    +
    +

    Command is used as item of offline queue, which is used when adapter status becomes offline. + When adapter status becomes online, Storage flushes the queue and executes this commands. + Commands which was not executed successfully will be re-queued.

    +
    +
    +

    Hierarchy

    @@ -106,7 +115,7 @@

    params

    params: any
    diff --git a/docs/api/interfaces/executorcontext.html b/docs/api/interfaces/executorcontext.html index 7b12473..0d2735a 100644 --- a/docs/api/interfaces/executorcontext.html +++ b/docs/api/interfaces/executorcontext.html @@ -98,7 +98,7 @@

    executor

    executor: Executor
    @@ -108,7 +108,7 @@

    key

    key: string
    @@ -118,7 +118,7 @@

    options

    @@ -128,7 +128,7 @@

    Optional record

    diff --git a/docs/api/interfaces/expireoptions.html b/docs/api/interfaces/expireoptions.html index 401d740..d55eb38 100644 --- a/docs/api/interfaces/expireoptions.html +++ b/docs/api/interfaces/expireoptions.html @@ -104,9 +104,14 @@

    Optional expiresIn

    expiresIn: undefined | number
    +
    +
    +

    The number of milliseconds after which the key values are considered obsolete

    +
    +
    @@ -114,9 +119,14 @@

    Optional permanent

    permanent: undefined | false | true
    +
    +
    +

    Is the key "permanent"? Permanent key is not disabled when expiresIn

    +
    +
    diff --git a/docs/api/interfaces/lockedkeyretrievestrategy.html b/docs/api/interfaces/lockedkeyretrievestrategy.html index 94df55c..6db33ce 100644 --- a/docs/api/interfaces/lockedkeyretrievestrategy.html +++ b/docs/api/interfaces/lockedkeyretrievestrategy.html @@ -66,6 +66,15 @@

    Interface LockedKeyRetrieveStrategy

    +
    +
    +
    +

    It is possible (for descendants of BaseManager) to change the behavior of getting + updated results. For example if you deal with heavy queries to DB you probably want + to run one query at once forcing other consumers to wait for results in cache.

    +
    +
    +

    Hierarchy

      @@ -107,7 +116,7 @@

      get

    • Type parameters

      @@ -136,7 +145,7 @@

      getName

    • Returns string

      diff --git a/docs/api/interfaces/logger.html b/docs/api/interfaces/logger.html index 7481a7b..f686bef 100644 --- a/docs/api/interfaces/logger.html +++ b/docs/api/interfaces/logger.html @@ -66,6 +66,14 @@

      Interface Logger

      +
      +
      +
      +

      Logger is the simple interface which used by Manager and Cache to log + errors and trace/debug information

      +
      +
      +

      Hierarchy

        @@ -96,19 +104,19 @@

        Methods

        error

          -
        • error(args: any[]): void
        • +
        • error(...args: any[]): void
        • Parameters

          • -
            Rest args: any[]
            +
            Rest ...args: any[]

          Returns void

          @@ -119,19 +127,19 @@

          Returns void

          info

            -
          • info(args: any[]): void
          • +
          • info(...args: any[]): void
          • Parameters

            • -
              Rest args: any[]
              +
              Rest ...args: any[]

            Returns void

            @@ -142,19 +150,19 @@

            Returns void

            trace

              -
            • trace(args: any[]): void
            • +
            • trace(...args: any[]): void
            • Parameters

              • -
                Rest args: any[]
                +
                Rest ...args: any[]

              Returns void

              @@ -165,19 +173,19 @@

              Returns void

              warn

                -
              • warn(args: any[]): void
              • +
              • warn(...args: any[]): void
              • Parameters

                • -
                  Rest args: any[]
                  +
                  Rest ...args: any[]

                Returns void

                diff --git a/docs/api/interfaces/manager.html b/docs/api/interfaces/manager.html index d9f561a..60969b1 100644 --- a/docs/api/interfaces/manager.html +++ b/docs/api/interfaces/manager.html @@ -66,6 +66,15 @@

                Interface Manager

                +
                +
                +
                +

                Manager is the basic interface for all caching classes. Manager must implement + two simple methods - get, and set. Cache class will delegate it's get and set calls to manager + which must decide what record should be threaten as invalid, when and how to update record

                +
                +
                +

                Hierarchy

                  @@ -109,7 +118,7 @@

                  get

                • Type parameters

                  @@ -138,13 +147,13 @@

                  Returns Promise

                  set

                  • Parameters

                    diff --git a/docs/api/interfaces/managerconstructor.html b/docs/api/interfaces/managerconstructor.html index 12da8eb..d616fb8 100644 --- a/docs/api/interfaces/managerconstructor.html +++ b/docs/api/interfaces/managerconstructor.html @@ -113,7 +113,7 @@

                    constructor

                  • Parameters

                    @@ -139,7 +139,7 @@

                    getName

                  • Returns string

                    diff --git a/docs/api/interfaces/manageroptions.html b/docs/api/interfaces/manageroptions.html index 8b0a11f..17a196d 100644 --- a/docs/api/interfaces/manageroptions.html +++ b/docs/api/interfaces/manageroptions.html @@ -113,9 +113,14 @@

                    Optional expiresIn

                    +
                    +
                    +

                    The number of milliseconds after which the key values are considered obsolete

                    +
                    +

                @@ -123,7 +128,7 @@

                Optional hashKeys

                hashKeys: undefined | false | true
                @@ -133,7 +138,7 @@

                Optional lockedKeyRe
                lockedKeyRetrieveStrategies: [string, LockedKeyRetrieveStrategy][]

      @@ -143,7 +148,7 @@

      logger

      logger: Logger
    @@ -154,9 +159,14 @@

    Optional permanent

    +
    +
    +

    Is the key "permanent"? Permanent key is not disabled when expiresIn

    +
    +
    @@ -164,7 +174,7 @@

    Optional prefix

    prefix: undefined | string
    @@ -174,7 +184,7 @@

    Optional refreshAheadrefreshAheadFactor: undefined | number @@ -184,7 +194,7 @@

    storage

    storage: Storage
    diff --git a/docs/api/interfaces/managerselectoroptions.html b/docs/api/interfaces/managerselectoroptions.html index 12b6357..ae0c109 100644 --- a/docs/api/interfaces/managerselectoroptions.html +++ b/docs/api/interfaces/managerselectoroptions.html @@ -95,7 +95,7 @@

    Optional manager

    manager: undefined | string
    diff --git a/docs/api/interfaces/readoptions.html b/docs/api/interfaces/readoptions.html index 96a63b5..95a7a25 100644 --- a/docs/api/interfaces/readoptions.html +++ b/docs/api/interfaces/readoptions.html @@ -66,6 +66,13 @@

    Interface ReadOptions

    +
    +
    +
    +

    Settings for getting the StorageRecord. Used in get

    +
    +
    +

    Hierarchy

      @@ -95,9 +102,15 @@

      Optional lockedKeyRe
      lockedKeyRetrieveStrategyType: LockedKeyRetrieveStrategyType | string
      +
      +
      +

      When reading a key, it is possible to set a strategy for behavior when a key expires. lockedKeyRetrieveStrategyType sets + name of the strategy used. If not specified, the default strategy will be used.

      +
      +

    diff --git a/docs/api/interfaces/recorderrorcontext.html b/docs/api/interfaces/recorderrorcontext.html deleted file mode 100644 index dc06a8d..0000000 --- a/docs/api/interfaces/recorderrorcontext.html +++ /dev/null @@ -1,209 +0,0 @@ - - - - - - RecordErrorContext | cachalot - - - - - -
    -
    -
    -
    - -
    -
    - Options -
    -
    - All -
      -
    • Public
    • -
    • Public/Protected
    • -
    • All
    • -
    -
    - - - - - - -
    -
    - Menu -
    -
    -
    -
    -
    -
    - -

    Interface RecordErrorContext

    -
    -
    -
    -
    -
    -
    -
    -

    Hierarchy

    -
      -
    • - RecordErrorContext -
    • -
    -
    -
    -

    Index

    -
    -
    -
    -

    Properties

    - -
    -
    -
    -
    -
    -

    Properties

    -
    - -

    record

    - - -
    -
    - -

    recordValue

    -
    recordValue: any
    - -
    -
    -
    - -
    -
    -
    -
    -

    Legend

    -
    -
      -
    • Module
    • -
    • Object literal
    • -
    • Variable
    • -
    • Function
    • -
    • Function with type parameter
    • -
    • Index signature
    • -
    • Type alias
    • -
    • Type alias with type parameter
    • -
    -
      -
    • Enumeration
    • -
    • Enumeration member
    • -
    • Property
    • -
    • Method
    • -
    -
      -
    • Interface
    • -
    • Interface with type parameter
    • -
    • Constructor
    • -
    • Property
    • -
    • Method
    • -
    • Index signature
    • -
    -
      -
    • Class
    • -
    • Class with type parameter
    • -
    • Constructor
    • -
    • Property
    • -
    • Method
    • -
    • Accessor
    • -
    • Index signature
    • -
    -
      -
    • Inherited constructor
    • -
    • Inherited property
    • -
    • Inherited method
    • -
    • Inherited accessor
    • -
    -
      -
    • Protected property
    • -
    • Protected method
    • -
    • Protected accessor
    • -
    -
      -
    • Private property
    • -
    • Private method
    • -
    • Private accessor
    • -
    -
      -
    • Static property
    • -
    • Static method
    • -
    -
    -
    -
    -
    - - - - diff --git a/docs/api/interfaces/refreshaheadmanageroptions.html b/docs/api/interfaces/refreshaheadmanageroptions.html index cc052ac..e738b2c 100644 --- a/docs/api/interfaces/refreshaheadmanageroptions.html +++ b/docs/api/interfaces/refreshaheadmanageroptions.html @@ -108,9 +108,14 @@

    Optional expiresIn

    +
    +
    +

    The number of milliseconds after which the key values are considered obsolete

    +
    +
    @@ -119,7 +124,7 @@

    Optional hashKeys

    @@ -130,7 +135,7 @@

    Optional lockedKeyRe @@ -141,7 +146,7 @@

    logger

    @@ -152,9 +157,14 @@

    Optional permanent

    +
    +
    +

    Is the key "permanent"? Permanent key is not disabled when expiresIn

    +
    +
    @@ -163,7 +173,7 @@

    Optional prefix

    @@ -174,7 +184,7 @@

    Optional refreshAhead

    Overrides ManagerOptions.refreshAheadFactor

    @@ -185,7 +195,7 @@

    storage

    diff --git a/docs/api/interfaces/storage.html b/docs/api/interfaces/storage.html index a536a46..ce52d24 100644 --- a/docs/api/interfaces/storage.html +++ b/docs/api/interfaces/storage.html @@ -66,6 +66,15 @@

    Interface Storage

    +
    +
    +
    +

    Storage is an abstraction over different operations with records + It manipulates with it's own StorageRecord type which is abstraction + over simple storage keys

    +
    +
    +

    Hierarchy

    diff --git a/docs/api/interfaces/storageadapter.html b/docs/api/interfaces/storageadapter.html index 21612c4..67e5a3e 100644 --- a/docs/api/interfaces/storageadapter.html +++ b/docs/api/interfaces/storageadapter.html @@ -66,6 +66,15 @@

    Interface StorageAdapter

    +
    +
    +
    +

    Interface adapter for class Manager. Adapter is "interlayer" + between storage methods and the manager itself. Any adapter + must implement all methods and properties of this interface

    +
    +
    +

    Hierarchy

    +
    + +

    addToSet

    +
      +
    • addToSet(key: string, values: string[]): Promise<void>
    • +
    +
      +
    • + +
      +
      +

      Adds values to the set

      +
      +
      +

      Parameters

      +
        +
      • +
        key: string
        +
      • +
      • +
        values: string[]
        +
      • +
      +

      Returns Promise<void>

      +
    • +
    +

    del

    @@ -139,9 +187,14 @@

    del

  • +
    +
    +

    Removes the entry with the key key from storage

    +
    +

    Parameters

    • @@ -152,6 +205,37 @@

      Returns Promise

  • +
    + +

    deleteFromSet

    +
      +
    • deleteFromSet(key: string, values: string[]): Promise<void>
    • +
    +
      +
    • + +
      +
      +

      Deletes values from the set

      +
      +
      +

      Parameters

      +
        +
      • +
        key: string
        +
      • +
      • +
        values: string[]
        +
      • +
      +

      Returns Promise<void>

      +
    • +
    +

    get

    @@ -162,9 +246,15 @@

    get

  • +
    +
    +

    get - returns value by key + Returns null if record does not exist

    +
    +

    Parameters

  • +
    + +

    intersectWithSet

    +
      +
    • intersectWithSet(key: string, values: string[]): Promise<Set<string>>
    • +
    +
      +
    • + +
      +
      +

      Returns set intersection with values

      +
      +
      +

      Parameters

      +
        +
      • +
        key: string
        +
      • +
      • +
        values: string[]
        +
      • +
      +

      Returns Promise<Set<string>>

      +
    • +
    +

    isLockExists

    @@ -202,9 +328,14 @@

    isLockExists

  • +
    +
    +

    Checks if the entry with the key key is locked for changes

    +
    +

    Parameters

    • @@ -225,9 +356,15 @@

      mget

    • +
      +
      +

      mget - returns values by keys + Returns null for records that do not exist

      +
      +

      Parameters

      • @@ -248,9 +385,14 @@

        mset

      • +
        +
        +

        mset - stores values to the storage

        +
        +

        Parameters

        • @@ -265,30 +407,35 @@

          Returns Promise

          onConnect

            -
          • onConnect(callback: function): void
          • +
          • onConnect(callback: (...args: any[]) => any): void
          • +
            +
            +

            The method should call the callback passed to it as soon as the storage is ready to execute commands.

            +
            +

            Parameters

            • -
              callback: function
              +
              callback: (...args: any[]) => any
              • -
                  -
                • (args: any[]): any
                • +
                    +
                  • (...args: any[]): any
                  • Parameters

                    • -
                      Rest args: any[]
                      +
                      Rest ...args: any[]

                    Returns any

                    @@ -312,9 +459,14 @@

                    releaseLock

                  • +
                    +
                    +

                    Unlocks the record with the key key, returns true if the operation is successful, otherwise false

                    +
                    +

                    Parameters

                    • @@ -329,15 +481,21 @@

                      Returns Promise

                      set

                        -
                      • set(key: string, value: string, expiresIn: undefined | number): Promise<boolean>
                      • +
                      • set(key: string, value: string, expiresIn?: undefined | number): Promise<boolean>
                      • +
                        +
                        +

                        set - sets the value for the key key in storage. + Returns true on success; false otherwise.

                        +
                        +

                        Parameters

                        • @@ -364,9 +522,14 @@

                          Optional setOptions

                        • +
                          +
                          +

                          The method sends the settings from above (from BaseManager) to the adapter. Called in the BaseManager constructor if set

                          +
                          +

                          Parameters

                          • @@ -397,15 +560,24 @@

                            Returns void acquireLock

                          • +
                          • + addToSet +
                          • del
                          • +
                          • + deleteFromSet +
                          • get
                          • getConnectionStatus
                          • +
                          • + intersectWithSet +
                          • isLockExists
                          • diff --git a/docs/api/interfaces/storageadapteroptions.html b/docs/api/interfaces/storageadapteroptions.html index fab74d5..2e4fc5b 100644 --- a/docs/api/interfaces/storageadapteroptions.html +++ b/docs/api/interfaces/storageadapteroptions.html @@ -66,6 +66,14 @@

                            Interface StorageAdapterOptions

                            +
                            +
                            +
                            +

                            The interface of the settings object required to transfer parameters from the Manager to the StorageAdapter + for later use in its methods set, get, del, etc.

                            +
                            +
                            +

                            Hierarchy

                            diff --git a/docs/api/interfaces/storagerecord.html b/docs/api/interfaces/storagerecord.html index 9afbeb2..26f531d 100644 --- a/docs/api/interfaces/storagerecord.html +++ b/docs/api/interfaces/storagerecord.html @@ -66,6 +66,14 @@

                            Interface StorageRecord

                            +
                            +
                            +
                            +

                            Key interface in cache storage. Any adapter and other modules related to the storage of cache entries + must implement this interface.

                            +
                            +
                            +

                            Hierarchy

                              @@ -100,9 +108,14 @@

                              createdAt

                              createdAt: number
                              +
                              +
                              +

                              The time in unixtime when the key was created

                              +
                              +
                            @@ -110,9 +123,14 @@

                            expiresIn

                            expiresIn: number
                            +
                            +
                            +

                            Key lifetime in milliseconds

                            +
                            +
                            @@ -120,9 +138,14 @@

                            key

                            key: string
                            +
                            +
                            +

                            Record key

                            +
                            +
                            @@ -130,9 +153,14 @@

                            permanent

                            permanent: boolean
                            +
                            +
                            +

                            Is the key is "permanent". Permanent key is not treats as invalid when it expires

                            +
                            +
                            @@ -140,9 +168,14 @@

                            tags

                            +
                            +
                            +

                            Cache tags Array with pairs of tag name and version. The version is stored as unixtime.

                            +
                            +
                            @@ -150,9 +183,14 @@

                            Optional value

                            +
                            +
                            +

                            Key value

                            +
                            +

  • diff --git a/docs/api/interfaces/storagerecordtag.html b/docs/api/interfaces/storagerecordtag.html index 26b1f3b..1246af0 100644 --- a/docs/api/interfaces/storagerecordtag.html +++ b/docs/api/interfaces/storagerecordtag.html @@ -66,6 +66,13 @@

    Interface StorageRecordTag

    +
    +
    +
    +

    Cache key tag In this form, tags are stored in the adapter's storage.

    +
    +
    +

    Hierarchy

    @@ -106,9 +118,14 @@

    version

    version: number
    +
    +
    +

    Tag version in unixtime

    +
    +
    diff --git a/docs/api/interfaces/writeoptions.html b/docs/api/interfaces/writeoptions.html index d4c1a8b..ad3fd98 100644 --- a/docs/api/interfaces/writeoptions.html +++ b/docs/api/interfaces/writeoptions.html @@ -104,19 +104,29 @@

    Optional expiresIn

    +
    +
    +

    The number of milliseconds after which the key values are considered obsolete

    +
    +

    Optional getTags

    -
    getTags: undefined | function
    +
    getTags: undefined | ((executorResult: any) => string[])
    +
    +
    +

    getTags allows to detect tags for record depending on executor result

    +
    +
    @@ -125,19 +135,31 @@

    Optional permanent

    +
    +
    +

    Is the key "permanent"? Permanent key is not disabled when expiresIn

    +
    +

    Optional tags

    -
    tags: string[] | function
    +
    tags: string[] | (() => string[])
    +
    +
    +

    Tags - are keys for which the manager checks the validity of a particular entry. + If the tag value is in the cache and invalidation time < current time, the tag will be considered invalid and + the record will need to be obtained using the executor

    +
    +
    diff --git a/docs/api/media/images/not-touched-tags-optimization/get_tags.png b/docs/api/media/images/not-touched-tags-optimization/get_tags.png new file mode 100644 index 0000000..03cc023 Binary files /dev/null and b/docs/api/media/images/not-touched-tags-optimization/get_tags.png differ diff --git a/docs/api/media/images/not-touched-tags-optimization/set.png b/docs/api/media/images/not-touched-tags-optimization/set.png new file mode 100644 index 0000000..120d9b7 Binary files /dev/null and b/docs/api/media/images/not-touched-tags-optimization/set.png differ diff --git a/docs/api/media/images/not-touched-tags-optimization/touch.png b/docs/api/media/images/not-touched-tags-optimization/touch.png new file mode 100644 index 0000000..1f7e28f Binary files /dev/null and b/docs/api/media/images/not-touched-tags-optimization/touch.png differ diff --git a/docs/assets/images/not-touched-tags-optimization/get_tags.png b/docs/assets/images/not-touched-tags-optimization/get_tags.png new file mode 100644 index 0000000..03cc023 Binary files /dev/null and b/docs/assets/images/not-touched-tags-optimization/get_tags.png differ diff --git a/docs/assets/images/not-touched-tags-optimization/set.png b/docs/assets/images/not-touched-tags-optimization/set.png new file mode 100644 index 0000000..120d9b7 Binary files /dev/null and b/docs/assets/images/not-touched-tags-optimization/set.png differ diff --git a/docs/assets/images/not-touched-tags-optimization/touch.png b/docs/assets/images/not-touched-tags-optimization/touch.png new file mode 100644 index 0000000..1f7e28f Binary files /dev/null and b/docs/assets/images/not-touched-tags-optimization/touch.png differ diff --git a/integration/jest.config.js b/integration/jest.config.js index 8665e8d..ff540e5 100644 --- a/integration/jest.config.js +++ b/integration/jest.config.js @@ -6,7 +6,7 @@ module.exports = { }, }, testMatch: ['/tests/**/*.spec.ts'], - testEnvironment: 'jsdom', + testEnvironment: 'node', transform: { '^.+\\.ts$': 'ts-jest', }, diff --git a/integration/tests/redis.spec.ts b/integration/tests/adapters/redis.spec.ts similarity index 55% rename from integration/tests/redis.spec.ts rename to integration/tests/adapters/redis.spec.ts index 5cf998f..3513ee0 100644 --- a/integration/tests/redis.spec.ts +++ b/integration/tests/adapters/redis.spec.ts @@ -1,7 +1,7 @@ -import faker from 'faker'; +import { v4 as uuid } from 'uuid'; import Redis, { Redis as RedisType } from 'ioredis'; -import RedisStorageAdapter, { CACHE_PREFIX } from '../../src/adapters/redis'; -import { ConnectionStatus } from '../../src/connection-status'; +import RedisStorageAdapter, { CACHE_PREFIX } from '../../../src/adapters/redis'; +import { ConnectionStatus } from '../../../src/connection-status'; let redis: RedisType; let adapter: RedisStorageAdapter; @@ -10,12 +10,13 @@ function delay(duration: number): Promise { return new Promise((resolve) => setTimeout(resolve, duration + 1)); } -const expireTimeout = 5; +const longExpireTimeout = 50; +const shortExpireTimeout = 50; describe('Redis adapter', () => { beforeAll(() => { redis = new Redis(); - adapter = new RedisStorageAdapter(redis, { lockExpireTimeout: expireTimeout }); + adapter = new RedisStorageAdapter(redis, { lockExpireTimeout: longExpireTimeout }); }); afterAll(() => { @@ -29,16 +30,16 @@ describe('Redis adapter', () => { describe('set', () => { it('set returns true if operation is successful', async () => { - const key = faker.random.uuid(); - const value = faker.random.uuid(); + const key = uuid(); + const value = uuid(); await expect(adapter.set(key, value)).resolves.toEqual(true); await expect(adapter.get(key)).resolves.toEqual(value); }); it('set adds cache prefix', async () => { - const key = faker.random.uuid(); - const value = faker.random.uuid(); + const key = uuid(); + const value = uuid(); await adapter.set(key, value); @@ -46,32 +47,35 @@ describe('Redis adapter', () => { }); it('set calls set with cache prefix and PX mode when expires set', async () => { - const key = faker.random.uuid(); - const value = faker.random.uuid(); + const key = uuid(); + const value = uuid(); + + const localAdapter = new RedisStorageAdapter(redis, { lockExpireTimeout: shortExpireTimeout }); + await localAdapter.set(key, value, shortExpireTimeout); + + await delay(shortExpireTimeout); - await adapter.set(key, value, expireTimeout); - await delay(expireTimeout); await expect(redis.get(`${CACHE_PREFIX}:${key}`)).resolves.toBeNull(); }); }); describe('get', () => { it('get returns value', async () => { - const key = faker.random.uuid(); - const value = faker.random.uuid(); + const key = uuid(); + const value = uuid(); await expect(adapter.set(key, value)); await expect(adapter.get(key)).resolves.toEqual(value); }); it('get returns null if key does not set', async () => { - const key = faker.random.uuid(); + const key = uuid(); await expect(adapter.get(key)).resolves.toBeNull(); }); it('get adds cache prefix', async () => { - const key = faker.random.uuid(); - const value = faker.random.uuid(); + const key = uuid(); + const value = uuid(); await redis.set(`${CACHE_PREFIX}:${key}`, value); await expect(adapter.get(key)).resolves.toEqual(value); @@ -80,8 +84,8 @@ describe('Redis adapter', () => { describe('del', () => { it('del calls del with cache prefix', async () => { - const key = faker.random.uuid(); - const value = faker.random.uuid(); + const key = uuid(); + const value = uuid(); await redis.set(`${CACHE_PREFIX}:${key}`, value); await adapter.del(key); @@ -90,7 +94,7 @@ describe('Redis adapter', () => { }); it('del does nothing if key does not exist', async () => { - const key = faker.random.uuid(); + const key = uuid(); const keyWithPrefix = `${CACHE_PREFIX}:${key}`; await expect(redis.get(keyWithPrefix)).resolves.toBeNull(); @@ -101,18 +105,20 @@ describe('Redis adapter', () => { describe('acquireLock', () => { it('acquireLock returns true if lock is successful', async () => { - const key = faker.random.uuid(); + const key = uuid(); const lockResult = await adapter.acquireLock(key); expect(lockResult).toEqual(true); }); it('acquireLock calls set with generated key name and in NX mode', async () => { - const key = faker.random.uuid(); - const lockResult = await adapter.acquireLock(key); + const key = uuid(); + const localAdapter = new RedisStorageAdapter(redis, { lockExpireTimeout: shortExpireTimeout }); + const lockResult = await localAdapter.acquireLock(key); expect(lockResult).toEqual(true); - await delay(expireTimeout); + + await delay(shortExpireTimeout); await (expect(redis.get(`${key}_lock`))).resolves.toBeNull(); }); @@ -120,13 +126,13 @@ describe('Redis adapter', () => { describe('releaseLock', () => { it('releaseLock returns false if lock does not exist', async () => { - const key = faker.random.uuid(); + const key = uuid(); const releaseLockResult = await adapter.releaseLock(key); expect(releaseLockResult).toEqual(false); }); it('releaseLock delete lock record with appropriate key, and returns true on success', async () => { - const key = faker.random.uuid(); + const key = uuid(); await redis.set(`${key}_lock`, ''); const releaseLockResult = await adapter.releaseLock(key); @@ -134,7 +140,7 @@ describe('Redis adapter', () => { }); it('releaseLock delete lock record set by acquireLock', async () => { - const key = faker.random.uuid(); + const key = uuid(); await adapter.acquireLock(key); @@ -144,14 +150,14 @@ describe('Redis adapter', () => { describe('isLockExists', () => { it('isLockExists returns true if lock exists', async () => { - const key = faker.random.uuid(); + const key = uuid(); await adapter.acquireLock(key); await expect(adapter.isLockExists(key)).resolves.toEqual(true); }); it('isLockExists returns false if lock does not exist', async () => { - const key = faker.random.uuid(); + const key = uuid(); await expect(adapter.isLockExists(key)).resolves.toEqual(false); }); @@ -160,8 +166,8 @@ describe('Redis adapter', () => { describe('mset', () => { it('mset sets values', async () => { const values = new Map([ - [faker.random.uuid(), faker.random.uuid()], - [faker.random.uuid(), faker.random.uuid()] + [uuid(), uuid()], + [uuid(), uuid()] ]); await adapter.mset(values); @@ -178,8 +184,8 @@ describe('Redis adapter', () => { describe('mget', () => { it('mget gets values', async () => { const values = new Map([ - [faker.random.uuid(), faker.random.uuid()], - [faker.random.uuid(), faker.random.uuid()] + [uuid(), uuid()], + [uuid(), uuid()] ]); for (const [key, value] of values.entries()) { @@ -193,8 +199,8 @@ describe('Redis adapter', () => { it('mget returns null for non-existing keys', async () => { const values = new Map([ - [faker.random.uuid(), faker.random.uuid()], - [faker.random.uuid(), faker.random.uuid()] + [uuid(), uuid()], + [uuid(), uuid()] ]); for (const [key, value] of values.entries()) { @@ -202,12 +208,90 @@ describe('Redis adapter', () => { } const keys = Array.from(values.keys()); - const nonExistingKey = faker.random.uuid(); + const nonExistingKey = uuid(); keys.push(nonExistingKey); const result = await adapter.mget(keys); expect(result).toEqual([...Array.from(values.values()), null]); }); + + it('fails if empty values passed', async () => { + await expect(adapter.mget([])).rejects.toThrowError('wrong number of arguments for \'mget\' command'); + }); + }); + + describe('addToSet', () => { + it('adds value to set', async () => { + const key = uuid(); + const value = uuid(); + + await adapter.addToSet(key, [value]); + + await expect(redis.smembers(`${CACHE_PREFIX}:${key}`)).resolves.toEqual([value]); + }); + + it('fails if empty values passed', async () => { + await expect(adapter.addToSet(uuid(), [])).rejects.toThrowError('wrong number of arguments for \'sadd\' command'); + }); + + it('does not fail if set does not exist', async () => { + await expect(adapter.addToSet(uuid(), [uuid()])).resolves.toBeUndefined(); + }); + }); + + describe('deleteFromSet', () => { + it('deletes value from set', async () => { + const key = uuid(); + const value = uuid(); + + await redis.sadd(`${CACHE_PREFIX}:${key}`, value); + + await adapter.deleteFromSet(key, [value]); + + await expect(redis.smembers(`${CACHE_PREFIX}:${key}`)).resolves.toEqual([]); + }); + + it('fails if empty values passed', async () => { + const key = uuid(); + const value = uuid(); + + await redis.sadd(`${CACHE_PREFIX}:${key}`, value); + + await expect(adapter.deleteFromSet(key, [])).rejects.toThrowError('wrong number of arguments for \'srem\' command'); + }); + + it('does not fail if set does not exist', async () => { + await expect(adapter.deleteFromSet(uuid(), [uuid()])).resolves.toBeUndefined(); + }); + }); + + describe('intersectWithSet', () => { + it('fails if empty values passed', async () => { + await expect(adapter.intersectWithSet(uuid(), [])).rejects.toThrowError('wrong number of arguments for \'sadd\' command'); + }); + + it('does not fail if set does not exist', async () => { + await expect(adapter.intersectWithSet(uuid(), [uuid()])).resolves.toEqual(new Set()); + }); + + it('returns original set if it does not intersect with passed one', async () => { + const key = uuid(); + const value = uuid(); + + await redis.sadd(`${CACHE_PREFIX}:${key}`, value); + + await expect(adapter.intersectWithSet(key, [uuid()])).resolves.toEqual(new Set()); + }); + + it('returns non-empty intersection', async () => { + const key = uuid(); + const value = uuid(); + + await redis.sadd(`${CACHE_PREFIX}:${key}`, value); + await redis.sadd(`${CACHE_PREFIX}:${uuid()}`, uuid()); + + await expect(adapter.intersectWithSet(key, [value, uuid()])).resolves.toEqual(new Set([value])); + }); }); }); diff --git a/integration/tests/storages/base.spec.ts b/integration/tests/storages/base.spec.ts new file mode 100644 index 0000000..344d6b5 --- /dev/null +++ b/integration/tests/storages/base.spec.ts @@ -0,0 +1,168 @@ +import Redis from 'ioredis'; +import { v4 as uuid } from 'uuid'; +import RedisStorageAdapter from '../../../src/adapters/redis'; +import { BaseStorage, NOT_TOUCHED_TAGS_CACHE_KEY } from '../../../src/storages/base'; + +const redis = new Redis(); +const adapter = new RedisStorageAdapter(redis); +const prefix = 'cache'; +const storage = new BaseStorage({ adapter, prefix }); + +describe('Base storage', () => { + beforeEach(async () => { + await redis.flushall(); + }); + + describe('set', () => { + it('set no tags if no tag specified', async () => { + const key = uuid(); + const value = uuid(); + await storage.set(key, value); + + await expect(redis.keys('*')).resolves.toEqual([`cache:cache-${key}`]); + }); + + it('adds new tag to not touched', async () => { + const key = uuid(); + const value = uuid(); + const tag = 'newTag'; + await storage.set(key, value, { tags: [tag] }); + + await expect(redis.smembers(`cache:${NOT_TOUCHED_TAGS_CACHE_KEY}`)).resolves.toEqual([tag]); + + const keys = await redis.keys('*'); + expect(keys.sort()).toEqual([ + `cache:cache-${key}`, + `cache:${NOT_TOUCHED_TAGS_CACHE_KEY}`, + `temporary-set:["${tag}"]` + ]); + }); + + it('adds only new tag to not touched and omits existing tag', async () => { + const key = uuid(); + const value = uuid(); + const tag = 'newTag'; + const existingTag = 'existingTag'; + const tagVersionKey = `cache:cache-cache-tags-versions:${existingTag}`; + + await redis.set(tagVersionKey, 1); + await storage.set(key, value, { tags: [tag, existingTag] }); + + await expect(redis.smembers(`cache:${NOT_TOUCHED_TAGS_CACHE_KEY}`)).resolves.toEqual([tag]); + await expect(redis.get(tagVersionKey)).resolves.toEqual('1'); + }); + + it('does not modify not touched if all tags exist', async () => { + const key = uuid(); + const value = uuid(); + const existingTag = 'existingTag'; + const tagVersionKey = `cache:cache-cache-tags-versions:${existingTag}`; + + await redis.set(tagVersionKey, 1); + await storage.set(key, value, { tags: [existingTag] }); + + await expect(redis.smembers(`cache:${NOT_TOUCHED_TAGS_CACHE_KEY}`)).resolves.toEqual([]); + await expect(redis.get(tagVersionKey)).resolves.toEqual('1'); + }); + }); + + describe('touch', () => { + it('removes tag from not touched', async () => { + const tag = 'notTouchedTag'; + await redis.sadd(`cache:${NOT_TOUCHED_TAGS_CACHE_KEY}`, tag); + + await storage.touch([tag]); + + await expect(redis.smembers(`cache:${NOT_TOUCHED_TAGS_CACHE_KEY}`)).resolves.toEqual([]); + await expect(redis.get(`cache:cache-cache-tags-versions:${tag}`)).resolves.not.toEqual('0'); + }); + + it('preserves not touched if touched only existing tags', async () => { + const existingTag = 'existingTag'; + const tagVersionKey = `cache:cache-cache-tags-versions:${existingTag}`; + await redis.set(tagVersionKey, 1); + + await storage.touch([existingTag]); + + await expect(redis.smembers(`cache:${NOT_TOUCHED_TAGS_CACHE_KEY}`)).resolves.toEqual([]); + await expect(redis.get(tagVersionKey)).resolves.not.toEqual('0'); + }); + }); + + describe('getTags', () => { + it('returns correct version for unknown tag', async () => { + const tag = 'unknownTag'; + + await expect(storage.getTags([tag])).resolves.toEqual([{ name: tag, version: 0 }]); + }); + + it('returns correct version for not touched tag', async () => { + const tag = 'notTouchedTag'; + await redis.sadd(`cache:${NOT_TOUCHED_TAGS_CACHE_KEY}`, tag); + + const tags = await storage.getTags([tag]); + expect(tags).toEqual([{ name: tag, version: 0 }]); + }); + + it('returns correct version for existing tag', async () => { + const existingTag = 'existingTag'; + const tagVersionKey = `cache:cache-cache-tags-versions:${existingTag}`; + await redis.set(tagVersionKey, 1); + + const tags = await storage.getTags([existingTag]); + + expect(tags).toEqual([{ name: existingTag, version: 1 }]); + }); + + it('returns correct version for mixed tags', async () => { + const existingTag = 'existingTag'; + const tagVersionKey = `cache:cache-cache-tags-versions:${existingTag}`; + await redis.set(tagVersionKey, 1); + + const notTouchedTag = 'notTouchedTag'; + const notTouchedUnusedTag = 'notTouchedUnusedTag'; + await redis.sadd(`cache:${NOT_TOUCHED_TAGS_CACHE_KEY}`, notTouchedTag, notTouchedUnusedTag); + + const getActualTagsSpy = jest.spyOn(storage as any, 'getActualTags'); + + const tags = await storage.getTags([existingTag, notTouchedTag]); + + expect(getActualTagsSpy).toHaveBeenLastCalledWith([existingTag]); + + expect(tags).toEqual([ + { name: notTouchedTag, version: 0 }, + { name: existingTag, version: 1 } + ]); + }); + }); + + describe('Combo', () => { + it('works', async () => { + const tag1 = 'tag1'; + + await storage.set(uuid(), uuid(), { tags: [tag1]}); + await expect(storage.getTags([tag1])).resolves.toEqual([{ name: tag1, version: 0 }]); + + await storage.touch([tag1]); + const tags = await storage.getTags([tag1]); + expect(tags).toHaveLength(1); + expect(tags[0].name).toEqual(tag1); + expect(tags[0].version).toBeGreaterThan(0); + + const tag2 = 'tag2'; + await storage.set(uuid(), uuid(), { tags: [tag2]}); + const tags2 = await storage.getTags([tag1, tag2]); + expect(tags2).toHaveLength(2); + expect(tags2[0]).toEqual({ name: tag2, version: 0 }); + expect(tags2[1]).toEqual(tags[0]); + + await storage.touch([tag1, tag2]); + const tags3 = await storage.getTags([tag1, tag2]); + expect(tags3).toHaveLength(2); + expect(tags3[0].name).toEqual(tag1); + expect(tags3[0].version).not.toEqual(tags[0].version); + expect(tags3[1].name).toEqual(tag2); + expect(tags3[1].version).toBeGreaterThan(0); + }); + }); +}); diff --git a/package-lock.json b/package-lock.json index 6b2326e..fe0d780 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,27 +14,48 @@ } }, "@babel/core": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.5.0.tgz", - "integrity": "sha512-6Isr4X98pwXqHvtigw71CKgmhL1etZjPs5A67jL/w0TkLM9eqmFR40YrnJvEc1WnMZFsskjsmid8bHZyxKEAnw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.5.0", - "@babel/helpers": "^7.5.0", - "@babel/parser": "^7.5.0", - "@babel/template": "^7.4.4", - "@babel/traverse": "^7.5.0", - "@babel/types": "^7.5.0", - "convert-source-map": "^1.1.0", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.3.tgz", + "integrity": "sha512-4XFkf8AwyrEG7Ziu3L2L0Cv+WyY47Tcsp70JFmpftbAA1K7YL/sgE9jh9HyNj08Y/U50ItUchpN0w6HxAoX1rA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.3", + "@babel/helpers": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3", + "convert-source-map": "^1.7.0", "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", "json5": "^2.1.0", - "lodash": "^4.17.11", + "lodash": "^4.17.13", "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" }, "dependencies": { + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/highlight": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", + "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -44,16 +65,15 @@ } }, "@babel/generator": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.5.0.tgz", - "integrity": "sha512-1TTVrt7J9rcG5PMjvO7VEG3FrEoEJNHxumRq66GemPmzboLWtIjjcJgk8rokuAS7IiRSpgVSu5Vb9lc99iJkOA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.3.tgz", + "integrity": "sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug==", "dev": true, "requires": { - "@babel/types": "^7.5.0", + "@babel/types": "^7.8.3", "jsesc": "^2.5.1", - "lodash": "^4.17.11", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" + "lodash": "^4.17.13", + "source-map": "^0.5.0" }, "dependencies": { "source-map": { @@ -65,49 +85,49 @@ } }, "@babel/helper-function-name": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", - "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", + "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/helper-get-function-arity": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", - "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.8.3" } }, "@babel/helper-plugin-utils": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", - "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz", + "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==", "dev": true }, "@babel/helper-split-export-declaration": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", - "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", "dev": true, "requires": { - "@babel/types": "^7.4.4" + "@babel/types": "^7.8.3" } }, "@babel/helpers": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.5.0.tgz", - "integrity": "sha512-EgCUEa8cNwuMrwo87l2d7i2oShi8m2Q58H7h3t4TWtqATZalJYFwfL9DulRe02f3KdqM9xmMCw3v/7Ll+EiaWg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.3.tgz", + "integrity": "sha512-LmU3q9Pah/XyZU89QvBgGt+BCsTPoQa+73RxAQh8fb8qkDyIfeQnmgs+hvzhTCKTzqOyk7JTkS3MS1S8Mq5yrQ==", "dev": true, "requires": { - "@babel/template": "^7.4.4", - "@babel/traverse": "^7.5.0", - "@babel/types": "^7.5.0" + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/highlight": { @@ -122,59 +142,118 @@ } }, "@babel/parser": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.5.0.tgz", - "integrity": "sha512-I5nW8AhGpOXGCCNYGc+p7ExQIBxRFnS2fd/d862bNOKvmoEPjYPcfIjsfdy0ujagYOIYPczKgD9l3FsgTkAzKA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz", + "integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ==", "dev": true }, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, "@babel/plugin-syntax-object-rest-spread": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", - "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", - "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz", + "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.4.4", - "@babel/types": "^7.4.4" + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/highlight": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", + "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + } } }, "@babel/traverse": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.5.0.tgz", - "integrity": "sha512-SnA9aLbyOCcnnbQEGwdfBggnc142h/rbqqsXcaATj2hZcegCl903pUD/lfpsNBlBSuWow/YDfRyJuWi2EPR5cg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.3.tgz", + "integrity": "sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.5.0", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.5.0", - "@babel/types": "^7.5.0", + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.3", + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3", "debug": "^4.1.0", "globals": "^11.1.0", - "lodash": "^4.17.11" + "lodash": "^4.17.13" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/highlight": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", + "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + } } }, "@babel/types": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.0.tgz", - "integrity": "sha512-UFpDVqRABKsW01bvw7/wSUe56uy6RXM5+VJibVVAybDGxEW25jdwiFJEf7ASvSaC7sN7rbE/l3cLp2izav+CtQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", + "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", "dev": true, "requires": { "esutils": "^2.0.2", - "lodash": "^4.17.11", + "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, "@cnakazawa/watch": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz", @@ -281,173 +360,607 @@ } } }, + "@istanbuljs/load-nyc-config": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.0.0.tgz", + "integrity": "sha512-ZR0rq/f/E4f4XcgnDvtMWXCUJpi8eO0rssVhmztsZqLIEFA9UUP9zmpE0VxlM+kv/E1ul2I876Fwil2ayptDVg==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", + "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", + "dev": true + }, "@jest/console": { - "version": "24.7.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.7.1.tgz", - "integrity": "sha512-iNhtIy2M8bXlAOULWVTUxmnelTLFneTNEkHCgPmgd+zNwy9zVddJ6oS5rZ9iwoscNdT5mMwUd0C51v/fSlzItg==", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-25.1.0.tgz", + "integrity": "sha512-3P1DpqAMK/L07ag/Y9/Jup5iDEG9P4pRAuZiMQnU0JB3UOvCyYCjCoxr7sIA80SeyUCUKrr24fKAxVpmBgQonA==", "dev": true, "requires": { - "@jest/source-map": "^24.3.0", - "chalk": "^2.0.1", - "slash": "^2.0.0" + "@jest/source-map": "^25.1.0", + "chalk": "^3.0.0", + "jest-util": "^25.1.0", + "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "@jest/core": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.8.0.tgz", - "integrity": "sha512-R9rhAJwCBQzaRnrRgAdVfnglUuATXdwTRsYqs6NMdVcAl5euG8LtWDe+fVkN27YfKVBW61IojVsXKaOmSnqd/A==", - "dev": true, - "requires": { - "@jest/console": "^24.7.1", - "@jest/reporters": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.1", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-25.1.0.tgz", + "integrity": "sha512-iz05+NmwCmZRzMXvMo6KFipW7nzhbpEawrKrkkdJzgytavPse0biEnCNr2wRlyCsp3SmKaEY+SGv7YWYQnIdig==", + "dev": true, + "requires": { + "@jest/console": "^25.1.0", + "@jest/reporters": "^25.1.0", + "@jest/test-result": "^25.1.0", + "@jest/transform": "^25.1.0", + "@jest/types": "^25.1.0", + "ansi-escapes": "^4.2.1", + "chalk": "^3.0.0", "exit": "^0.1.2", - "graceful-fs": "^4.1.15", - "jest-changed-files": "^24.8.0", - "jest-config": "^24.8.0", - "jest-haste-map": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-regex-util": "^24.3.0", - "jest-resolve-dependencies": "^24.8.0", - "jest-runner": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-snapshot": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", - "jest-watcher": "^24.8.0", - "micromatch": "^3.1.10", - "p-each-series": "^1.0.0", - "pirates": "^4.0.1", + "graceful-fs": "^4.2.3", + "jest-changed-files": "^25.1.0", + "jest-config": "^25.1.0", + "jest-haste-map": "^25.1.0", + "jest-message-util": "^25.1.0", + "jest-regex-util": "^25.1.0", + "jest-resolve": "^25.1.0", + "jest-resolve-dependencies": "^25.1.0", + "jest-runner": "^25.1.0", + "jest-runtime": "^25.1.0", + "jest-snapshot": "^25.1.0", + "jest-util": "^25.1.0", + "jest-validate": "^25.1.0", + "jest-watcher": "^25.1.0", + "micromatch": "^4.0.2", + "p-each-series": "^2.1.0", "realpath-native": "^1.1.0", - "rimraf": "^2.5.4", - "strip-ansi": "^5.0.0" + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.0.tgz", + "integrity": "sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "graceful-fs": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } } }, "@jest/environment": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.8.0.tgz", - "integrity": "sha512-vlGt2HLg7qM+vtBrSkjDxk9K0YtRBi7HfRFaDxoRtyi+DyVChzhF20duvpdAnKVBV6W5tym8jm0U9EfXbDk1tw==", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-25.1.0.tgz", + "integrity": "sha512-cTpUtsjU4cum53VqBDlcW0E4KbQF03Cn0jckGPW/5rrE9tb+porD3+hhLtHAwhthsqfyF+bizyodTlsRA++sHg==", "dev": true, "requires": { - "@jest/fake-timers": "^24.8.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", - "jest-mock": "^24.8.0" + "@jest/fake-timers": "^25.1.0", + "@jest/types": "^25.1.0", + "jest-mock": "^25.1.0" } }, "@jest/fake-timers": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.8.0.tgz", - "integrity": "sha512-2M4d5MufVXwi6VzZhJ9f5S/wU4ud2ck0kxPof1Iz3zWx6Y+V2eJrES9jEktB6O3o/oEyk+il/uNu9PvASjWXQw==", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-25.1.0.tgz", + "integrity": "sha512-Eu3dysBzSAO1lD7cylZd/CVKdZZ1/43SF35iYBNV1Lvvn2Undp3Grwsv8PrzvbLhqwRzDd4zxrY4gsiHc+wygQ==", "dev": true, "requires": { - "@jest/types": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-mock": "^24.8.0" + "@jest/types": "^25.1.0", + "jest-message-util": "^25.1.0", + "jest-mock": "^25.1.0", + "jest-util": "^25.1.0", + "lolex": "^5.0.0" } }, "@jest/reporters": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.8.0.tgz", - "integrity": "sha512-eZ9TyUYpyIIXfYCrw0UHUWUvE35vx5I92HGMgS93Pv7du+GHIzl+/vh8Qj9MCWFK/4TqyttVBPakWMOfZRIfxw==", - "dev": true, - "requires": { - "@jest/environment": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", - "chalk": "^2.0.1", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-25.1.0.tgz", + "integrity": "sha512-ORLT7hq2acJQa8N+NKfs68ZtHFnJPxsGqmofxW7v7urVhzJvpKZG9M7FAcgh9Ee1ZbCteMrirHA3m5JfBtAaDg==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^25.1.0", + "@jest/environment": "^25.1.0", + "@jest/test-result": "^25.1.0", + "@jest/transform": "^25.1.0", + "@jest/types": "^25.1.0", + "chalk": "^3.0.0", + "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", "glob": "^7.1.2", - "istanbul-lib-coverage": "^2.0.2", - "istanbul-lib-instrument": "^3.0.1", - "istanbul-lib-report": "^2.0.4", - "istanbul-lib-source-maps": "^3.0.1", - "istanbul-reports": "^2.1.1", - "jest-haste-map": "^24.8.0", - "jest-resolve": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-util": "^24.8.0", - "jest-worker": "^24.6.0", - "node-notifier": "^5.2.1", - "slash": "^2.0.0", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.0", + "jest-haste-map": "^25.1.0", + "jest-resolve": "^25.1.0", + "jest-runtime": "^25.1.0", + "jest-util": "^25.1.0", + "jest-worker": "^25.1.0", + "node-notifier": "^6.0.0", + "slash": "^3.0.0", "source-map": "^0.6.0", - "string-length": "^2.0.0" + "string-length": "^3.1.0", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^4.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "@jest/source-map": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.3.0.tgz", - "integrity": "sha512-zALZt1t2ou8le/crCeeiRYzvdnTzaIlpOWaet45lNSqNJUnXbppUUFR4ZUAlzgDmKee4Q5P/tKXypI1RiHwgag==", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-25.1.0.tgz", + "integrity": "sha512-ohf2iKT0xnLWcIUhL6U6QN+CwFWf9XnrM2a6ybL9NXxJjgYijjLSitkYHIdzkd8wFliH73qj/+epIpTiWjRtAA==", "dev": true, "requires": { "callsites": "^3.0.0", - "graceful-fs": "^4.1.15", + "graceful-fs": "^4.2.3", "source-map": "^0.6.0" + }, + "dependencies": { + "graceful-fs": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", + "dev": true + } } }, "@jest/test-result": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.8.0.tgz", - "integrity": "sha512-+YdLlxwizlfqkFDh7Mc7ONPQAhA4YylU1s529vVM1rsf67vGZH/2GGm5uO8QzPeVyaVMobCQ7FTxl38QrKRlng==", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-25.1.0.tgz", + "integrity": "sha512-FZzSo36h++U93vNWZ0KgvlNuZ9pnDnztvaM7P/UcTx87aPDotG18bXifkf1Ji44B7k/eIatmMzkBapnAzjkJkg==", "dev": true, "requires": { - "@jest/console": "^24.7.1", - "@jest/types": "^24.8.0", - "@types/istanbul-lib-coverage": "^2.0.0" + "@jest/console": "^25.1.0", + "@jest/transform": "^25.1.0", + "@jest/types": "^25.1.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" } }, "@jest/test-sequencer": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.8.0.tgz", - "integrity": "sha512-OzL/2yHyPdCHXEzhoBuq37CE99nkme15eHkAzXRVqthreWZamEMA0WoetwstsQBCXABhczpK03JNbc4L01vvLg==", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-25.1.0.tgz", + "integrity": "sha512-WgZLRgVr2b4l/7ED1J1RJQBOharxS11EFhmwDqknpknE0Pm87HLZVS2Asuuw+HQdfQvm2aXL2FvvBLxOD1D0iw==", "dev": true, "requires": { - "@jest/test-result": "^24.8.0", - "jest-haste-map": "^24.8.0", - "jest-runner": "^24.8.0", - "jest-runtime": "^24.8.0" + "@jest/test-result": "^25.1.0", + "jest-haste-map": "^25.1.0", + "jest-runner": "^25.1.0", + "jest-runtime": "^25.1.0" } }, "@jest/transform": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.8.0.tgz", - "integrity": "sha512-xBMfFUP7TortCs0O+Xtez2W7Zu1PLH9bvJgtraN1CDST6LBM/eTOZ9SfwS/lvV8yOfcDpFmwf9bq5cYbXvqsvA==", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-25.1.0.tgz", + "integrity": "sha512-4ktrQ2TPREVeM+KxB4zskAT84SnmG1vaz4S+51aTefyqn3zocZUnliLLm5Fsl85I3p/kFPN4CRp1RElIfXGegQ==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/types": "^24.8.0", - "babel-plugin-istanbul": "^5.1.0", - "chalk": "^2.0.1", + "@jest/types": "^25.1.0", + "babel-plugin-istanbul": "^6.0.0", + "chalk": "^3.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.1.15", - "jest-haste-map": "^24.8.0", - "jest-regex-util": "^24.3.0", - "jest-util": "^24.8.0", - "micromatch": "^3.1.10", + "graceful-fs": "^4.2.3", + "jest-haste-map": "^25.1.0", + "jest-regex-util": "^25.1.0", + "jest-util": "^25.1.0", + "micromatch": "^4.0.2", + "pirates": "^4.0.1", "realpath-native": "^1.1.0", - "slash": "^2.0.0", + "slash": "^3.0.0", "source-map": "^0.6.1", - "write-file-atomic": "2.4.1" - } - }, - "@jest/types": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.8.0.tgz", - "integrity": "sha512-g17UxVr2YfBtaMUxn9u/4+siG1ptg9IGYAYwvpwn61nBg779RXnjE/m7CxYcIzEt0AbHZZAHSEZNhkE2WxURVg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^12.0.9" - } - }, - "@nodelib/fs.scandir": { + "write-file-atomic": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "graceful-fs": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "@jest/types": { + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.1.0.tgz", + "integrity": "sha512-VpOtt7tCrgvamWZh1reVsGADujKigBUFTi19mlRjqEGsE8qH4r3s+skY33dNdXOwyZIvuftZ5tqdF1IgsMejMA==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^15.0.0", + "chalk": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@nodelib/fs.scandir": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", @@ -960,10 +1473,19 @@ } } }, + "@sinonjs/commons": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.7.0.tgz", + "integrity": "sha512-qbk9AP+cZUsKdW1GJsBpxPKFmCJ0T8swwzVje3qFd+AkQb74Q/tiuzrdfFg8AD2g5HH/XbE/I8Uc1KYHVYWfhg==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, "@types/babel__core": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.2.tgz", - "integrity": "sha512-cfCCrFmiGY/yq0NuKNxIQvZFy9kY/1immpSpTngOnyIbD4+eJOG5mxphhHDv3CHL9GltO4GcKr54kGBg3RNdbg==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.3.tgz", + "integrity": "sha512-8fBo0UR2CcwWxeX7WIIgJ7lXjasFxoYgRnFHUj+hRvKkpiBJbxhdAPTCY6/ZKM0uxANFVzt4yObSLuTiTnazDA==", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -974,9 +1496,9 @@ } }, "@types/babel__generator": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.0.2.tgz", - "integrity": "sha512-NHcOfab3Zw4q5sEE2COkpfXjoE7o+PmqD9DQW4koUT3roNxwziUdXGnRndMat/LJNUtePwn1TlP4do3uoe3KZQ==", + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.1.tgz", + "integrity": "sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew==", "dev": true, "requires": { "@babel/types": "^7.0.0" @@ -993,26 +1515,26 @@ } }, "@types/babel__traverse": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.7.tgz", - "integrity": "sha512-CeBpmX1J8kWLcDEnI3Cl2Eo6RfbGvzUctA+CjZUhOKDFbLfcr7fc4usEqLNWetrlJd7RhAkyYe2czXop4fICpw==", + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.8.tgz", + "integrity": "sha512-yGeB2dHEdvxjP0y4UbRtQaSkXJ9649fYCmIdRoul5kfAoGCwxuCbMhag0k3RPfnuh9kPGm8x89btcfDEXdVWGw==", "dev": true, "requires": { "@babel/types": "^7.3.0" } }, + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", + "dev": true + }, "@types/events": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", "dev": true }, - "@types/faker": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/faker/-/faker-4.1.9.tgz", - "integrity": "sha512-4ZFqA3CEXB6MgT8sDV8E5LhW+O9ndONsHeQXMbEwfOsjoQ4UXKqTJKru+BjDBUfobYEpQz1WYF9/uzQsvbY2wA==", - "dev": true - }, "@types/glob": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", @@ -1025,9 +1547,9 @@ } }, "@types/ioredis": { - "version": "4.14.4", - "resolved": "https://registry.npmjs.org/@types/ioredis/-/ioredis-4.14.4.tgz", - "integrity": "sha512-6eM+TBd6YE8E+4DruPYKBYvMKSx+eRdBcJLlaxqZsViR5UQWu+VEkkltet5Z2ZFhRqHMnDf38xDvI1GESCD2Ig==", + "version": "4.14.6", + "resolved": "https://registry.npmjs.org/@types/ioredis/-/ioredis-4.14.6.tgz", + "integrity": "sha512-VUbEZaeCfdiqfd3UDtmPpwewCBdbnjpMZtarKuZV7XwkhqgBZN208WQpsD3hT0BJqEx3GPApFnIVnIOq/eBpbA==", "dev": true, "requires": { "@types/node": "*" @@ -1040,9 +1562,9 @@ "dev": true }, "@types/istanbul-lib-report": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz", - "integrity": "sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "*" @@ -1059,20 +1581,15 @@ } }, "@types/jest": { - "version": "24.0.15", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.0.15.tgz", - "integrity": "sha512-MU1HIvWUme74stAoc3mgAi+aMlgKOudgEvQDIm1v4RkrDudBh1T+NFp5sftpBAdXdx1J0PbdpJ+M2EsSOi1djA==", + "version": "25.1.1", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-25.1.1.tgz", + "integrity": "sha512-bKSZJYZJLzwaoVYNN4W3A0RvKNYsrLm5tsuXaMlfYDxKf4gY2sFrMYneCugNQWGg1gjPW+FHBwNrwPzEi4sIsw==", "dev": true, "requires": { - "@types/jest-diff": "*" + "jest-diff": "^25.1.0", + "pretty-format": "^25.1.0" } }, - "@types/jest-diff": { - "version": "20.0.1", - "resolved": "https://registry.npmjs.org/@types/jest-diff/-/jest-diff-20.0.1.tgz", - "integrity": "sha512-yALhelO3i0hqZwhjtcr6dYyaLoCHbAMshwtj6cGxTvHZAKXHsYGdff6E8EPw3xLKY0ELUTQ69Q1rQiJENnccMA==", - "dev": true - }, "@types/lodash": { "version": "4.14.149", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.149.tgz", @@ -1109,10 +1626,25 @@ "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", "dev": true }, + "@types/uuid": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.7.tgz", + "integrity": "sha512-C2j2FWgQkF1ru12SjZJyMaTPxs/f6n90+5G5qNakBxKXjTBc/YTSelHh4Pz1HUDwxFXD9WvpQhOGCDC+/Y4mIQ==", + "dev": true + }, "@types/yargs": { - "version": "12.0.12", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-12.0.12.tgz", - "integrity": "sha512-SOhuU4wNBxhhTHxYaiG5NY4HBhDIDnJF60GU+2LqHAdKKer86//e4yg69aENCtQ04n0ovz+tq2YPME5t5yp4pw==", + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.2.tgz", + "integrity": "sha512-hFkuAp58M2xOc1QgJhkFrLMnqa8KWTFRTnzrI1zlEcOfg3DZ0eH3aPAo/N6QlVVu8E4KS4xD1jtEG3rdQYFmIg==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", + "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==", "dev": true }, "JSONStream": { @@ -1126,21 +1658,21 @@ } }, "abab": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz", - "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz", + "integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==", "dev": true }, "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", + "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==", "dev": true }, "acorn-globals": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.2.tgz", - "integrity": "sha512-BbzvZhVtZP+Bs1J1HcwrQe8ycfO0wStkSGxuul3He3GkHOIZ6eTqOkPuw9IP1X3+IkOo4wiJmwkobzXYz4wewQ==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", + "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", "dev": true, "requires": { "acorn": "^6.0.1", @@ -1148,9 +1680,9 @@ }, "dependencies": { "acorn": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.2.0.tgz", - "integrity": "sha512-8oe72N3WPMjA+2zVG71Ia0nXZ8DpQH+QyyHO+p06jT8eg8FGG3FbcUIi8KziHlAfheJQZeoqbvq1mQSQHXKYLw==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.0.tgz", + "integrity": "sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw==", "dev": true } } @@ -1228,13 +1760,13 @@ "dev": true }, "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", "dev": true, "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, "argparse": { @@ -1339,12 +1871,6 @@ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", "dev": true }, - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", - "dev": true - }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -1376,48 +1902,103 @@ "dev": true }, "babel-jest": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.8.0.tgz", - "integrity": "sha512-+5/kaZt4I9efoXzPlZASyK/lN9qdRKmmUav9smVc0ruPQD7IsfucQ87gpOE8mn2jbDuS6M/YOW6n3v9ZoIfgnw==", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-25.1.0.tgz", + "integrity": "sha512-tz0VxUhhOE2y+g8R2oFrO/2VtVjA1lkJeavlhExuRBg3LdNJY9gwQ+Vcvqt9+cqy71MCTJhewvTB7Qtnnr9SWg==", "dev": true, "requires": { - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/transform": "^25.1.0", + "@jest/types": "^25.1.0", "@types/babel__core": "^7.1.0", - "babel-plugin-istanbul": "^5.1.0", - "babel-preset-jest": "^24.6.0", - "chalk": "^2.4.2", - "slash": "^2.0.0" + "babel-plugin-istanbul": "^6.0.0", + "babel-preset-jest": "^25.1.0", + "chalk": "^3.0.0", + "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "babel-plugin-istanbul": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.4.tgz", - "integrity": "sha512-dySz4VJMH+dpndj0wjJ8JPs/7i1TdSPb1nRrn56/92pKOF9VKC1FMFJmMXjzlGGusnCAqujP6PBCiKq0sVA+YQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", + "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", "dev": true, "requires": { - "find-up": "^3.0.0", - "istanbul-lib-instrument": "^3.3.0", - "test-exclude": "^5.2.3" + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^4.0.0", + "test-exclude": "^6.0.0" } }, "babel-plugin-jest-hoist": { - "version": "24.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.6.0.tgz", - "integrity": "sha512-3pKNH6hMt9SbOv0F3WVmy5CWQ4uogS3k0GY5XLyQHJ9EGpAT9XWkFd2ZiXXtkwFHdAHa5j7w7kfxSP5lAIwu7w==", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.1.0.tgz", + "integrity": "sha512-oIsopO41vW4YFZ9yNYoLQATnnN46lp+MZ6H4VvPKFkcc2/fkl3CfE/NZZSmnEIEsJRmJAgkVEK0R7Zbl50CpTw==", "dev": true, "requires": { "@types/babel__traverse": "^7.0.6" } }, "babel-preset-jest": { - "version": "24.6.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.6.0.tgz", - "integrity": "sha512-pdZqLEdmy1ZK5kyRUfvBb2IfTPb2BUvIJczlPspS8fWmBQslNNDBqVfh7BW5leOVJMDZKzjD8XEyABTk6gQ5yw==", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-25.1.0.tgz", + "integrity": "sha512-eCGn64olaqwUMaugXsTtGAM2I0QTahjEtnRu0ql8Ie+gDWAc1N6wqN0k2NilnyTunM69Pad7gJY7LOtwLimoFQ==", "dev": true, "requires": { + "@babel/plugin-syntax-bigint": "^7.0.0", "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "babel-plugin-jest-hoist": "^24.6.0" + "babel-plugin-jest-hoist": "^25.1.0" } }, "babel-runtime": { @@ -1594,9 +2175,9 @@ } }, "bser": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.0.tgz", - "integrity": "sha512-8zsjWrQkkBoLK6uxASk1nJ2SKv97ltiGDo6A3wA0/yRPz+CwmEyDo0hUrhIuukG2JHpAl3bvFIixw2/3Hi0DOg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, "requires": { "node-int64": "^0.4.0" @@ -1802,29 +2383,52 @@ "dev": true }, "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" }, "dependencies": { "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^5.0.0" } } } @@ -1841,10 +2445,10 @@ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", "dev": true }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "collect-v8-coverage": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.0.tgz", + "integrity": "sha512-VKIhJgvk8E1W28m5avZ2Gv2Ruv5YiF56ug2oclvaG9md69BuZImMG2sk9g7QNKLUbtYAKQjXjYxbYZVUlMMKmQ==", "dev": true }, "collection-visit": { @@ -2085,9 +2689,9 @@ } }, "convert-source-map": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", - "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", "dev": true, "requires": { "safe-buffer": "~5.1.1" @@ -2166,18 +2770,26 @@ "dev": true }, "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", "dev": true }, "cssstyle": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.3.0.tgz", - "integrity": "sha512-wXsoRfsRfsLVNaVzoKdqvEmK/5PFaEXNspVT22Ots6K/cnJdpoDKuQFw+qlMiXnmaif1OgeC466X1zISgAOcGg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.2.0.tgz", + "integrity": "sha512-sEb3XFPx3jNnCAMtqrXPDeSgQr+jojtCeNf8cvMNMh1cG970+lljssvQDzPq6lmmJu2Vhqood/gtEomBiHOGnA==", "dev": true, "requires": { "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + } } }, "currently-unhandled": { @@ -2223,19 +2835,6 @@ "abab": "^2.0.0", "whatwg-mimetype": "^2.2.0", "whatwg-url": "^7.0.0" - }, - "dependencies": { - "whatwg-url": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz", - "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - } } }, "dateformat": { @@ -2382,9 +2981,9 @@ "dev": true }, "detect-newline": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", - "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true }, "diff": { @@ -2394,9 +2993,9 @@ "dev": true }, "diff-sequences": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.3.0.tgz", - "integrity": "sha512-xLqpez+Zj9GKSnPWS0WZw1igGocZ+uua8+y+5dDNTT934N3QuY1sp2LkHzwiaYQGz60hMq0pjAshdeXm5VUOEw==", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.1.0.tgz", + "integrity": "sha512-nFIfVk5B/NStCsJ+zaPO4vYuLjlzQ6uFvPxzYyHlejNZ/UGa7G/n7peOXVrVNvRuyfstt+mZQYGpjxg9Z6N8Kw==", "dev": true }, "dir-glob": { @@ -2512,23 +3111,28 @@ } }, "es-abstract": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", - "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "version": "1.17.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz", + "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==", "dev": true, "requires": { - "es-to-primitive": "^1.2.0", + "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "has": "^1.0.3", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-keys": "^1.0.12" + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" } }, "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "requires": { "is-callable": "^1.1.4", @@ -2558,24 +3162,16 @@ "dev": true }, "escodegen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz", - "integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.13.0.tgz", + "integrity": "sha512-eYk2dCkxR07DsHA/X2hRBj0CFAZeri/LyDMc0C8JT1Hqi6JnVpMhJ7XFITbb0+yZS3lVkaPL2oCkZ3AVmeVbMw==", "dev": true, "requires": { - "esprima": "^3.1.3", + "esprima": "^4.0.1", "estraverse": "^4.2.0", "esutils": "^2.0.2", "optionator": "^0.8.1", "source-map": "~0.6.1" - }, - "dependencies": { - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", - "dev": true - } } }, "esprima": { @@ -2585,9 +3181,9 @@ "dev": true }, "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, "esutils": { @@ -2597,9 +3193,9 @@ "dev": true }, "exec-sh": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.2.tgz", - "integrity": "sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", + "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==", "dev": true }, "execa": { @@ -2683,29 +3279,56 @@ } }, "expect": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-24.8.0.tgz", - "integrity": "sha512-/zYvP8iMDrzaaxHVa724eJBCKqSHmO0FA7EDkBiRHxg6OipmMn1fN+C8T9L9K8yr7UONkOifu6+LLH+z76CnaA==", - "dev": true, - "requires": { - "@jest/types": "^24.8.0", - "ansi-styles": "^3.2.0", - "jest-get-type": "^24.8.0", - "jest-matcher-utils": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-regex-util": "^24.3.0" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-25.1.0.tgz", + "integrity": "sha512-wqHzuoapQkhc3OKPlrpetsfueuEiMf3iWh0R8+duCu9PIjXoP7HgD5aeypwTnXUAjC8aMsiVDaWwlbJ1RlQ38g==", + "dev": true, + "requires": { + "@jest/types": "^25.1.0", + "ansi-styles": "^4.0.0", + "jest-get-type": "^25.1.0", + "jest-matcher-utils": "^25.1.0", + "jest-message-util": "^25.1.0", + "jest-regex-util": "^25.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { "assign-symbols": "^1.0.0", @@ -2805,12 +3428,6 @@ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", "dev": true }, - "faker": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/faker/-/faker-4.1.0.tgz", - "integrity": "sha1-HkW7vsxndLPBlfrSg1EJxtdIzD8=", - "dev": true - }, "fast-deep-equal": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", @@ -2897,12 +3514,12 @@ } }, "fb-watchman": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", - "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", "dev": true, "requires": { - "bser": "^2.0.0" + "bser": "2.1.1" } }, "figures": { @@ -2954,12 +3571,21 @@ "dev": true }, "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { - "locate-path": "^3.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "dependencies": { + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + } } }, "find-versions": { @@ -3052,610 +3678,75 @@ "dev": true }, "fsevents": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", - "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", + "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.1", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", + "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "git-log-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/git-log-parser/-/git-log-parser-1.2.0.tgz", + "integrity": "sha1-LmpMGxP8AAKCB7p5WnrDFme5/Uo=", "dev": true, - "optional": true, "requires": { - "nan": "^2.12.1", - "node-pre-gyp": "^0.12.0" + "argv-formatter": "~1.0.0", + "spawn-error-forwarder": "~1.0.0", + "split2": "~1.0.0", + "stream-combiner2": "~1.1.1", + "through2": "~2.0.0", + "traverse": "~0.6.6" }, "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { + "split2": { "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, + "resolved": "https://registry.npmjs.org/split2/-/split2-1.0.0.tgz", + "integrity": "sha1-UuLiIdiMdfmnP5BVbiY/+WdysxQ=", "dev": true, - "optional": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true, - "optional": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.3.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^4.1.0", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.12.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.7.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "git-log-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/git-log-parser/-/git-log-parser-1.2.0.tgz", - "integrity": "sha1-LmpMGxP8AAKCB7p5WnrDFme5/Uo=", - "dev": true, - "requires": { - "argv-formatter": "~1.0.0", - "spawn-error-forwarder": "~1.0.0", - "split2": "~1.0.0", - "stream-combiner2": "~1.1.1", - "through2": "~2.0.0", - "traverse": "~0.6.6" - }, - "dependencies": { - "split2": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-1.0.0.tgz", - "integrity": "sha1-UuLiIdiMdfmnP5BVbiY/+WdysxQ=", - "dev": true, - "requires": { - "through2": "~2.0.0" + "through2": "~2.0.0" } } } @@ -3763,7 +3854,8 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "dev": true + "dev": true, + "optional": true }, "handlebars": { "version": "4.7.2", @@ -3809,9 +3901,9 @@ "dev": true }, "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", "dev": true }, "has-value": { @@ -3847,9 +3939,9 @@ } }, "highlight.js": { - "version": "9.15.10", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.15.10.tgz", - "integrity": "sha512-RoV7OkQm0T3os3Dd2VHLNMoaoDVx77Wygln3n9l5YV172XonWG6rgQD3XnF/BuFFZw9A0TJgmMSO8FEWQgvcXw==", + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.0.tgz", + "integrity": "sha512-A97kI1KAUzKoAiEoaGcf2O9YPS8nbDTCRFokaaeBhnqjQTvbAuAJrQMm21zw8s8xzaMtCQBtgbyGXLGxdxQyqQ==", "dev": true }, "homedir-polyfill": { @@ -3882,6 +3974,12 @@ "whatwg-encoding": "^1.0.1" } }, + "html-escaper": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.0.tgz", + "integrity": "sha512-a4u9BeERWGu/S8JiWEAQcdrg9v4QArtP9keViQjGMdff20fBdd8waotXaNmODqBe6uZ3Nafi7K/ho4gCQHV3Ig==", + "dev": true + }, "http-proxy-agent": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", @@ -3990,13 +4088,13 @@ } }, "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", + "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", "dev": true, "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" } }, "imurmurhash": { @@ -4089,21 +4187,6 @@ } } }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true - }, "ioredis": { "version": "4.14.1", "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-4.14.1.tgz", @@ -4121,6 +4204,12 @@ "standard-as-callback": "^2.0.1" } }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true + }, "is-accessor-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", @@ -4154,9 +4243,9 @@ "dev": true }, "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", "dev": true }, "is-ci": { @@ -4189,9 +4278,9 @@ } }, "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", "dev": true }, "is-descriptor": { @@ -4300,12 +4389,12 @@ "dev": true }, "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", "dev": true, "requires": { - "has": "^1.0.1" + "has": "^1.0.3" } }, "is-stream": { @@ -4321,12 +4410,12 @@ "dev": true }, "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", "dev": true, "requires": { - "has-symbols": "^1.0.0" + "has-symbols": "^1.0.1" } }, "is-text-path": { @@ -4357,10 +4446,11 @@ "dev": true }, "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.1.1.tgz", + "integrity": "sha512-umZHcSrwlDHo2TGMXv0DZ8dIUGunZ2Iv68YZnrmCiBPkZ4aaOhtv7pXJKeki9k3qJ3RJr0cDyitcl5wEH3AYog==", + "dev": true, + "optional": true }, "isarray": { "version": "1.0.0", @@ -4400,322 +4490,905 @@ } }, "istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", + "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", "dev": true }, "istanbul-lib-instrument": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", - "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.0.tgz", + "integrity": "sha512-Nm4wVHdo7ZXSG30KjZ2Wl5SU/Bw7bDx1PdaiIFzEStdjs0H12mOTncn1GVYuqQSaZxpg87VGBRsVRPGD2cD1AQ==", "dev": true, "requires": { - "@babel/generator": "^7.4.0", - "@babel/parser": "^7.4.3", - "@babel/template": "^7.4.0", - "@babel/traverse": "^7.4.3", - "@babel/types": "^7.4.0", - "istanbul-lib-coverage": "^2.0.5", - "semver": "^6.0.0" + "@babel/core": "^7.7.5", + "@babel/parser": "^7.7.5", + "@babel/template": "^7.7.4", + "@babel/traverse": "^7.7.4", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" }, "dependencies": { "semver": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.2.0.tgz", - "integrity": "sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", + "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + } + }, + "istanbul-reports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.0.tgz", + "integrity": "sha512-2osTcC8zcOSUkImzN2EWQta3Vdi4WjjKw99P2yWx5mLnigAM0Rd5uYFn1cf2i/Ois45GkNjaoTqc5CxgMSX80A==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "java-properties": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/java-properties/-/java-properties-1.0.2.tgz", + "integrity": "sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==", + "dev": true + }, + "jest": { + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-25.1.0.tgz", + "integrity": "sha512-FV6jEruneBhokkt9MQk0WUFoNTwnF76CLXtwNMfsc0um0TlB/LG2yxUd0KqaFjEJ9laQmVWQWS0sG/t2GsuI0w==", + "dev": true, + "requires": { + "@jest/core": "^25.1.0", + "import-local": "^3.0.2", + "jest-cli": "^25.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "jest-cli": { + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-25.1.0.tgz", + "integrity": "sha512-p+aOfczzzKdo3AsLJlhs8J5EW6ffVidfSZZxXedJ0mHPBOln1DccqFmGCoO8JWd4xRycfmwy1eoQkMsF8oekPg==", + "dev": true, + "requires": { + "@jest/core": "^25.1.0", + "@jest/test-result": "^25.1.0", + "@jest/types": "^25.1.0", + "chalk": "^3.0.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "is-ci": "^2.0.0", + "jest-config": "^25.1.0", + "jest-util": "^25.1.0", + "jest-validate": "^25.1.0", + "prompts": "^2.0.1", + "realpath-native": "^1.1.0", + "yargs": "^15.0.0" + } + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-changed-files": { + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-25.1.0.tgz", + "integrity": "sha512-bdL1aHjIVy3HaBO3eEQeemGttsq1BDlHgWcOjEOIAcga7OOEGWHD2WSu8HhL7I1F0mFFyci8VKU4tRNk+qtwDA==", + "dev": true, + "requires": { + "@jest/types": "^25.1.0", + "execa": "^3.2.0", + "throat": "^5.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz", + "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "execa": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz", + "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "p-finally": "^2.0.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", + "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "p-finally": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", + "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } } } }, - "istanbul-lib-report": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", - "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", + "jest-config": { + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-25.1.0.tgz", + "integrity": "sha512-tLmsg4SZ5H7tuhBC5bOja0HEblM0coS3Wy5LTCb2C8ZV6eWLewHyK+3qSq9Bi29zmWQ7ojdCd3pxpx4l4d2uGw==", "dev": true, "requires": { - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "supports-color": "^6.1.0" + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^25.1.0", + "@jest/types": "^25.1.0", + "babel-jest": "^25.1.0", + "chalk": "^3.0.0", + "glob": "^7.1.1", + "jest-environment-jsdom": "^25.1.0", + "jest-environment-node": "^25.1.0", + "jest-get-type": "^25.1.0", + "jest-jasmine2": "^25.1.0", + "jest-regex-util": "^25.1.0", + "jest-resolve": "^25.1.0", + "jest-util": "^25.1.0", + "jest-validate": "^25.1.0", + "micromatch": "^4.0.2", + "pretty-format": "^25.1.0", + "realpath-native": "^1.1.0" }, "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" } - } - } - }, - "istanbul-lib-source-maps": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", - "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "rimraf": "^2.6.3", - "source-map": "^0.6.1" - } - }, - "istanbul-reports": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz", - "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==", - "dev": true, - "requires": { - "handlebars": "^4.1.2" - }, - "dependencies": { - "handlebars": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.2.tgz", - "integrity": "sha512-4PwqDL2laXtTWZghzzCtunQUTLbo31pcCJrd/B/9JP8XbhVzpS5ZXuKqlOzsd1rtcaLo4KqAn8nl8mkknS4MHw==", + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { - "neo-async": "^2.6.0", - "optimist": "^0.6.1", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4" + "is-number": "^7.0.0" } } } }, - "java-properties": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/java-properties/-/java-properties-1.0.2.tgz", - "integrity": "sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==", - "dev": true - }, - "jest": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-24.8.0.tgz", - "integrity": "sha512-o0HM90RKFRNWmAWvlyV8i5jGZ97pFwkeVoGvPW1EtLTgJc2+jcuqcbbqcSZLE/3f2S5pt0y2ZBETuhpWNl1Reg==", + "jest-diff": { + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-25.1.0.tgz", + "integrity": "sha512-nepXgajT+h017APJTreSieh4zCqnSHEJ1iT8HDlewu630lSJ4Kjjr9KNzm+kzGwwcpsDE6Snx1GJGzzsefaEHw==", "dev": true, "requires": { - "import-local": "^2.0.0", - "jest-cli": "^24.8.0" + "chalk": "^3.0.0", + "diff-sequences": "^25.1.0", + "jest-get-type": "^25.1.0", + "pretty-format": "^25.1.0" }, "dependencies": { - "jest-cli": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.8.0.tgz", - "integrity": "sha512-+p6J00jSMPQ116ZLlHJJvdf8wbjNbZdeSX9ptfHX06/MSNaXmKihQzx5vQcw0q2G6JsdVkUIdWbOWtSnaYs3yA==", + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", "dev": true, "requires": { - "@jest/core": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "import-local": "^2.0.0", - "is-ci": "^2.0.0", - "jest-config": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", - "prompts": "^2.0.1", - "realpath-native": "^1.1.0", - "yargs": "^12.0.2" + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" } } } }, - "jest-changed-files": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.8.0.tgz", - "integrity": "sha512-qgANC1Yrivsq+UrLXsvJefBKVoCsKB0Hv+mBb6NMjjZ90wwxCDmU3hsCXBya30cH+LnPYjwgcU65i6yJ5Nfuug==", - "dev": true, - "requires": { - "@jest/types": "^24.8.0", - "execa": "^1.0.0", - "throat": "^4.0.0" - } - }, - "jest-config": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.8.0.tgz", - "integrity": "sha512-Czl3Nn2uEzVGsOeaewGWoDPD8GStxCpAe0zOYs2x2l0fZAgPbCr3uwUkgNKV3LwE13VXythM946cd5rdGkkBZw==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^24.8.0", - "@jest/types": "^24.8.0", - "babel-jest": "^24.8.0", - "chalk": "^2.0.1", - "glob": "^7.1.1", - "jest-environment-jsdom": "^24.8.0", - "jest-environment-node": "^24.8.0", - "jest-get-type": "^24.8.0", - "jest-jasmine2": "^24.8.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", - "micromatch": "^3.1.10", - "pretty-format": "^24.8.0", - "realpath-native": "^1.1.0" - } - }, - "jest-diff": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.8.0.tgz", - "integrity": "sha512-wxetCEl49zUpJ/bvUmIFjd/o52J+yWcoc5ZyPq4/W1LUKGEhRYDIbP1KcF6t+PvqNrGAFk4/JhtxDq/Nnzs66g==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "diff-sequences": "^24.3.0", - "jest-get-type": "^24.8.0", - "pretty-format": "^24.8.0" - } - }, "jest-docblock": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.3.0.tgz", - "integrity": "sha512-nlANmF9Yq1dufhFlKG9rasfQlrY7wINJbo3q01tu56Jv5eBU5jirylhF2O5ZBnLxzOVBGRDz/9NAwNyBtG4Nyg==", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-25.1.0.tgz", + "integrity": "sha512-370P/mh1wzoef6hUKiaMcsPtIapY25suP6JqM70V9RJvdKLrV4GaGbfUseUVk4FZJw4oTZ1qSCJNdrClKt5JQA==", "dev": true, "requires": { - "detect-newline": "^2.1.0" + "detect-newline": "^3.0.0" } }, "jest-each": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.8.0.tgz", - "integrity": "sha512-NrwK9gaL5+XgrgoCsd9svsoWdVkK4gnvyhcpzd6m487tXHqIdYeykgq3MKI1u4I+5Zf0tofr70at9dWJDeb+BA==", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-25.1.0.tgz", + "integrity": "sha512-R9EL8xWzoPySJ5wa0DXFTj7NrzKpRD40Jy+zQDp3Qr/2QmevJgkN9GqioCGtAJ2bW9P/MQRznQHQQhoeAyra7A==", "dev": true, "requires": { - "@jest/types": "^24.8.0", - "chalk": "^2.0.1", - "jest-get-type": "^24.8.0", - "jest-util": "^24.8.0", - "pretty-format": "^24.8.0" + "@jest/types": "^25.1.0", + "chalk": "^3.0.0", + "jest-get-type": "^25.1.0", + "jest-util": "^25.1.0", + "pretty-format": "^25.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "jest-environment-jsdom": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.8.0.tgz", - "integrity": "sha512-qbvgLmR7PpwjoFjM/sbuqHJt/NCkviuq9vus9NBn/76hhSidO+Z6Bn9tU8friecegbJL8gzZQEMZBQlFWDCwAQ==", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-25.1.0.tgz", + "integrity": "sha512-ILb4wdrwPAOHX6W82GGDUiaXSSOE274ciuov0lztOIymTChKFtC02ddyicRRCdZlB5YSrv3vzr1Z5xjpEe1OHQ==", "dev": true, "requires": { - "@jest/environment": "^24.8.0", - "@jest/fake-timers": "^24.8.0", - "@jest/types": "^24.8.0", - "jest-mock": "^24.8.0", - "jest-util": "^24.8.0", - "jsdom": "^11.5.1" + "@jest/environment": "^25.1.0", + "@jest/fake-timers": "^25.1.0", + "@jest/types": "^25.1.0", + "jest-mock": "^25.1.0", + "jest-util": "^25.1.0", + "jsdom": "^15.1.1" } }, "jest-environment-node": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.8.0.tgz", - "integrity": "sha512-vIGUEScd1cdDgR6sqn2M08sJTRLQp6Dk/eIkCeO4PFHxZMOgy+uYLPMC4ix3PEfM5Au/x3uQ/5Tl0DpXXZsJ/Q==", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-25.1.0.tgz", + "integrity": "sha512-U9kFWTtAPvhgYY5upnH9rq8qZkj6mYLup5l1caAjjx9uNnkLHN2xgZy5mo4SyLdmrh/EtB9UPpKFShvfQHD0Iw==", "dev": true, "requires": { - "@jest/environment": "^24.8.0", - "@jest/fake-timers": "^24.8.0", - "@jest/types": "^24.8.0", - "jest-mock": "^24.8.0", - "jest-util": "^24.8.0" + "@jest/environment": "^25.1.0", + "@jest/fake-timers": "^25.1.0", + "@jest/types": "^25.1.0", + "jest-mock": "^25.1.0", + "jest-util": "^25.1.0" } }, "jest-get-type": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.8.0.tgz", - "integrity": "sha512-RR4fo8jEmMD9zSz2nLbs2j0zvPpk/KCEz3a62jJWbd2ayNo0cb+KFRxPHVhE4ZmgGJEQp0fosmNz84IfqM8cMQ==", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.1.0.tgz", + "integrity": "sha512-yWkBnT+5tMr8ANB6V+OjmrIJufHtCAqI5ic2H40v+tRqxDmE0PGnIiTyvRWFOMtmVHYpwRqyazDbTnhpjsGvLw==", "dev": true }, "jest-haste-map": { - "version": "24.8.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.8.1.tgz", - "integrity": "sha512-SwaxMGVdAZk3ernAx2Uv2sorA7jm3Kx+lR0grp6rMmnY06Kn/urtKx1LPN2mGTea4fCT38impYT28FfcLUhX0g==", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-25.1.0.tgz", + "integrity": "sha512-/2oYINIdnQZAqyWSn1GTku571aAfs8NxzSErGek65Iu5o8JYb+113bZysRMcC/pjE5v9w0Yz+ldbj9NxrFyPyw==", "dev": true, "requires": { - "@jest/types": "^24.8.0", - "anymatch": "^2.0.0", + "@jest/types": "^25.1.0", + "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", - "fsevents": "^1.2.7", - "graceful-fs": "^4.1.15", - "invariant": "^2.2.4", - "jest-serializer": "^24.4.0", - "jest-util": "^24.8.0", - "jest-worker": "^24.6.0", - "micromatch": "^3.1.10", + "fsevents": "^2.1.2", + "graceful-fs": "^4.2.3", + "jest-serializer": "^25.1.0", + "jest-util": "^25.1.0", + "jest-worker": "^25.1.0", + "micromatch": "^4.0.2", "sane": "^4.0.3", "walker": "^1.0.7" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "graceful-fs": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } } }, "jest-jasmine2": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.8.0.tgz", - "integrity": "sha512-cEky88npEE5LKd5jPpTdDCLvKkdyklnaRycBXL6GNmpxe41F0WN44+i7lpQKa/hcbXaQ+rc9RMaM4dsebrYong==", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-25.1.0.tgz", + "integrity": "sha512-GdncRq7jJ7sNIQ+dnXvpKO2MyP6j3naNK41DTTjEAhLEdpImaDA9zSAZwDhijjSF/D7cf4O5fdyUApGBZleaEg==", "dev": true, "requires": { "@babel/traverse": "^7.1.0", - "@jest/environment": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", - "chalk": "^2.0.1", + "@jest/environment": "^25.1.0", + "@jest/source-map": "^25.1.0", + "@jest/test-result": "^25.1.0", + "@jest/types": "^25.1.0", + "chalk": "^3.0.0", "co": "^4.6.0", - "expect": "^24.8.0", + "expect": "^25.1.0", "is-generator-fn": "^2.0.0", - "jest-each": "^24.8.0", - "jest-matcher-utils": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-snapshot": "^24.8.0", - "jest-util": "^24.8.0", - "pretty-format": "^24.8.0", - "throat": "^4.0.0" + "jest-each": "^25.1.0", + "jest-matcher-utils": "^25.1.0", + "jest-message-util": "^25.1.0", + "jest-runtime": "^25.1.0", + "jest-snapshot": "^25.1.0", + "jest-util": "^25.1.0", + "pretty-format": "^25.1.0", + "throat": "^5.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "jest-leak-detector": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.8.0.tgz", - "integrity": "sha512-cG0yRSK8A831LN8lIHxI3AblB40uhv0z+SsQdW3GoMMVcK+sJwrIIyax5tu3eHHNJ8Fu6IMDpnLda2jhn2pD/g==", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-25.1.0.tgz", + "integrity": "sha512-3xRI264dnhGaMHRvkFyEKpDeaRzcEBhyNrOG5oT8xPxOyUAblIAQnpiR3QXu4wDor47MDTiHbiFcbypdLcLW5w==", "dev": true, "requires": { - "pretty-format": "^24.8.0" + "jest-get-type": "^25.1.0", + "pretty-format": "^25.1.0" } }, "jest-matcher-utils": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.8.0.tgz", - "integrity": "sha512-lex1yASY51FvUuHgm0GOVj7DCYEouWSlIYmCW7APSqB9v8mXmKSn5+sWVF0MhuASG0bnYY106/49JU1FZNl5hw==", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-25.1.0.tgz", + "integrity": "sha512-KGOAFcSFbclXIFE7bS4C53iYobKI20ZWleAdAFun4W1Wz1Kkej8Ng6RRbhL8leaEvIOjGXhGf/a1JjO8bkxIWQ==", "dev": true, "requires": { - "chalk": "^2.0.1", - "jest-diff": "^24.8.0", - "jest-get-type": "^24.8.0", - "pretty-format": "^24.8.0" + "chalk": "^3.0.0", + "jest-diff": "^25.1.0", + "jest-get-type": "^25.1.0", + "pretty-format": "^25.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "jest-message-util": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.8.0.tgz", - "integrity": "sha512-p2k71rf/b6ns8btdB0uVdljWo9h0ovpnEe05ZKWceQGfXYr4KkzgKo3PBi8wdnd9OtNh46VpNIJynUn/3MKm1g==", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-25.1.0.tgz", + "integrity": "sha512-Nr/Iwar2COfN22aCqX0kCVbXgn8IBm9nWf4xwGr5Olv/KZh0CZ32RKgZWMVDXGdOahicM10/fgjdimGNX/ttCQ==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/test-result": "^25.1.0", + "@jest/types": "^25.1.0", "@types/stack-utils": "^1.0.1", - "chalk": "^2.0.1", - "micromatch": "^3.1.10", - "slash": "^2.0.0", + "chalk": "^3.0.0", + "micromatch": "^4.0.2", + "slash": "^3.0.0", "stack-utils": "^1.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } } }, "jest-mock": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.8.0.tgz", - "integrity": "sha512-6kWugwjGjJw+ZkK4mDa0Df3sDlUTsV47MSrT0nGQ0RBWJbpODDQ8MHDVtGtUYBne3IwZUhtB7elxHspU79WH3A==", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-25.1.0.tgz", + "integrity": "sha512-28/u0sqS+42vIfcd1mlcg4ZVDmSUYuNvImP4X2lX5hRMLW+CN0BeiKVD4p+ujKKbSPKd3rg/zuhCF+QBLJ4vag==", "dev": true, "requires": { - "@jest/types": "^24.8.0" + "@jest/types": "^25.1.0" } }, "jest-pnp-resolver": { @@ -4725,185 +5398,588 @@ "dev": true }, "jest-regex-util": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.3.0.tgz", - "integrity": "sha512-tXQR1NEOyGlfylyEjg1ImtScwMq8Oh3iJbGTjN7p0J23EuVX1MA8rwU69K4sLbCmwzgCUbVkm0FkSF9TdzOhtg==", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-25.1.0.tgz", + "integrity": "sha512-9lShaDmDpqwg+xAd73zHydKrBbbrIi08Kk9YryBEBybQFg/lBWR/2BDjjiSE7KIppM9C5+c03XiDaZ+m4Pgs1w==", "dev": true }, "jest-resolve": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.8.0.tgz", - "integrity": "sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw==", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-25.1.0.tgz", + "integrity": "sha512-XkBQaU1SRCHj2Evz2Lu4Czs+uIgJXWypfO57L7JYccmAXv4slXA6hzNblmcRmf7P3cQ1mE7fL3ABV6jAwk4foQ==", "dev": true, "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^25.1.0", "browser-resolve": "^1.11.3", - "chalk": "^2.0.1", + "chalk": "^3.0.0", "jest-pnp-resolver": "^1.2.1", "realpath-native": "^1.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "jest-resolve-dependencies": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.8.0.tgz", - "integrity": "sha512-hyK1qfIf/krV+fSNyhyJeq3elVMhK9Eijlwy+j5jqmZ9QsxwKBiP6qukQxaHtK8k6zql/KYWwCTQ+fDGTIJauw==", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-25.1.0.tgz", + "integrity": "sha512-Cu/Je38GSsccNy4I2vL12ZnBlD170x2Oh1devzuM9TLH5rrnLW1x51lN8kpZLYTvzx9j+77Y5pqBaTqfdzVzrw==", "dev": true, "requires": { - "@jest/types": "^24.8.0", - "jest-regex-util": "^24.3.0", - "jest-snapshot": "^24.8.0" + "@jest/types": "^25.1.0", + "jest-regex-util": "^25.1.0", + "jest-snapshot": "^25.1.0" } }, "jest-runner": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.8.0.tgz", - "integrity": "sha512-utFqC5BaA3JmznbissSs95X1ZF+d+4WuOWwpM9+Ak356YtMhHE/GXUondZdcyAAOTBEsRGAgH/0TwLzfI9h7ow==", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-25.1.0.tgz", + "integrity": "sha512-su3O5fy0ehwgt+e8Wy7A8CaxxAOCMzL4gUBftSs0Ip32S0epxyZPDov9Znvkl1nhVOJNf4UwAsnqfc3plfQH9w==", "dev": true, "requires": { - "@jest/console": "^24.7.1", - "@jest/environment": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", - "chalk": "^2.4.2", + "@jest/console": "^25.1.0", + "@jest/environment": "^25.1.0", + "@jest/test-result": "^25.1.0", + "@jest/types": "^25.1.0", + "chalk": "^3.0.0", "exit": "^0.1.2", - "graceful-fs": "^4.1.15", - "jest-config": "^24.8.0", - "jest-docblock": "^24.3.0", - "jest-haste-map": "^24.8.0", - "jest-jasmine2": "^24.8.0", - "jest-leak-detector": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-resolve": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-util": "^24.8.0", - "jest-worker": "^24.6.0", + "graceful-fs": "^4.2.3", + "jest-config": "^25.1.0", + "jest-docblock": "^25.1.0", + "jest-haste-map": "^25.1.0", + "jest-jasmine2": "^25.1.0", + "jest-leak-detector": "^25.1.0", + "jest-message-util": "^25.1.0", + "jest-resolve": "^25.1.0", + "jest-runtime": "^25.1.0", + "jest-util": "^25.1.0", + "jest-worker": "^25.1.0", "source-map-support": "^0.5.6", - "throat": "^4.0.0" + "throat": "^5.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "jest-runtime": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.8.0.tgz", - "integrity": "sha512-Mq0aIXhvO/3bX44ccT+czU1/57IgOMyy80oM0XR/nyD5zgBcesF84BPabZi39pJVA6UXw+fY2Q1N+4BiVUBWOA==", - "dev": true, - "requires": { - "@jest/console": "^24.7.1", - "@jest/environment": "^24.8.0", - "@jest/source-map": "^24.3.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", - "@types/yargs": "^12.0.2", - "chalk": "^2.0.1", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-25.1.0.tgz", + "integrity": "sha512-mpPYYEdbExKBIBB16ryF6FLZTc1Rbk9Nx0ryIpIMiDDkOeGa0jQOKVI/QeGvVGlunKKm62ywcioeFVzIbK03bA==", + "dev": true, + "requires": { + "@jest/console": "^25.1.0", + "@jest/environment": "^25.1.0", + "@jest/source-map": "^25.1.0", + "@jest/test-result": "^25.1.0", + "@jest/transform": "^25.1.0", + "@jest/types": "^25.1.0", + "@types/yargs": "^15.0.0", + "chalk": "^3.0.0", + "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", "glob": "^7.1.3", - "graceful-fs": "^4.1.15", - "jest-config": "^24.8.0", - "jest-haste-map": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-mock": "^24.8.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.8.0", - "jest-snapshot": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", + "graceful-fs": "^4.2.3", + "jest-config": "^25.1.0", + "jest-haste-map": "^25.1.0", + "jest-message-util": "^25.1.0", + "jest-mock": "^25.1.0", + "jest-regex-util": "^25.1.0", + "jest-resolve": "^25.1.0", + "jest-snapshot": "^25.1.0", + "jest-util": "^25.1.0", + "jest-validate": "^25.1.0", "realpath-native": "^1.1.0", - "slash": "^2.0.0", - "strip-bom": "^3.0.0", - "yargs": "^12.0.2" + "slash": "^3.0.0", + "strip-bom": "^4.0.0", + "yargs": "^15.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "jest-serializer": { - "version": "24.4.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.4.0.tgz", - "integrity": "sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q==", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-25.1.0.tgz", + "integrity": "sha512-20Wkq5j7o84kssBwvyuJ7Xhn7hdPeTXndnwIblKDR2/sy1SUm6rWWiG9kSCgJPIfkDScJCIsTtOKdlzfIHOfKA==", "dev": true }, "jest-snapshot": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.8.0.tgz", - "integrity": "sha512-5ehtWoc8oU9/cAPe6fez6QofVJLBKyqkY2+TlKTOf0VllBB/mqUNdARdcjlZrs9F1Cv+/HKoCS/BknT0+tmfPg==", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-25.1.0.tgz", + "integrity": "sha512-xZ73dFYN8b/+X2hKLXz4VpBZGIAn7muD/DAg+pXtDzDGw3iIV10jM7WiHqhCcpDZfGiKEj7/2HXAEPtHTj0P2A==", "dev": true, "requires": { "@babel/types": "^7.0.0", - "@jest/types": "^24.8.0", - "chalk": "^2.0.1", - "expect": "^24.8.0", - "jest-diff": "^24.8.0", - "jest-matcher-utils": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-resolve": "^24.8.0", + "@jest/types": "^25.1.0", + "chalk": "^3.0.0", + "expect": "^25.1.0", + "jest-diff": "^25.1.0", + "jest-get-type": "^25.1.0", + "jest-matcher-utils": "^25.1.0", + "jest-message-util": "^25.1.0", + "jest-resolve": "^25.1.0", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", - "pretty-format": "^24.8.0", - "semver": "^5.5.0" + "pretty-format": "^25.1.0", + "semver": "^7.1.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "semver": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.1.1.tgz", + "integrity": "sha512-WfuG+fl6eh3eZ2qAf6goB7nhiCd7NPXhmyFxigB/TOkQyeLP8w8GsVehvtGNtnNmyboz4TgeK40B1Kbql/8c5A==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "jest-util": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.8.0.tgz", - "integrity": "sha512-DYZeE+XyAnbNt0BG1OQqKy/4GVLPtzwGx5tsnDrFcax36rVE3lTA5fbvgmbVPUZf9w77AJ8otqR4VBbfFJkUZA==", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-25.1.0.tgz", + "integrity": "sha512-7did6pLQ++87Qsj26Fs/TIwZMUFBXQ+4XXSodRNy3luch2DnRXsSnmpVtxxQ0Yd6WTipGpbhh2IFP1mq6/fQGw==", "dev": true, "requires": { - "@jest/console": "^24.7.1", - "@jest/fake-timers": "^24.8.0", - "@jest/source-map": "^24.3.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", - "callsites": "^3.0.0", - "chalk": "^2.0.1", - "graceful-fs": "^4.1.15", + "@jest/types": "^25.1.0", + "chalk": "^3.0.0", "is-ci": "^2.0.0", - "mkdirp": "^0.5.1", - "slash": "^2.0.0", - "source-map": "^0.6.0" + "mkdirp": "^0.5.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "jest-validate": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.8.0.tgz", - "integrity": "sha512-+/N7VOEMW1Vzsrk3UWBDYTExTPwf68tavEPKDnJzrC6UlHtUDU/fuEdXqFoHzv9XnQ+zW6X3qMZhJ3YexfeLDA==", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-25.1.0.tgz", + "integrity": "sha512-kGbZq1f02/zVO2+t1KQGSVoCTERc5XeObLwITqC6BTRH3Adv7NZdYqCpKIZLUgpLXf2yISzQ465qOZpul8abXA==", "dev": true, "requires": { - "@jest/types": "^24.8.0", - "camelcase": "^5.0.0", - "chalk": "^2.0.1", - "jest-get-type": "^24.8.0", - "leven": "^2.1.0", - "pretty-format": "^24.8.0" + "@jest/types": "^25.1.0", + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "jest-get-type": "^25.1.0", + "leven": "^3.1.0", + "pretty-format": "^25.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "jest-watcher": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.8.0.tgz", - "integrity": "sha512-SBjwHt5NedQoVu54M5GEx7cl7IGEFFznvd/HNT8ier7cCAx/Qgu9ZMlaTQkvK22G1YOpcWBLQPFSImmxdn3DAw==", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-25.1.0.tgz", + "integrity": "sha512-Q9eZ7pyaIr6xfU24OeTg4z1fUqBF/4MP6J801lyQfg7CsnZ/TCzAPvCfckKdL5dlBBEKBeHV0AdyjFZ5eWj4ig==", "dev": true, "requires": { - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", - "@types/yargs": "^12.0.9", - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.1", - "jest-util": "^24.8.0", - "string-length": "^2.0.0" + "@jest/test-result": "^25.1.0", + "@jest/types": "^25.1.0", + "ansi-escapes": "^4.2.1", + "chalk": "^3.0.0", + "jest-util": "^25.1.0", + "string-length": "^3.1.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.0.tgz", + "integrity": "sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } } }, "jest-worker": { - "version": "24.6.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.6.0.tgz", - "integrity": "sha512-jDwgW5W9qGNvpI1tNnvajh0a5IE/PuGLFmHk6aR/BZFz8tSgGw17GsDPXAJ6p91IvYDjOw8GpFbvvZGAK+DPQQ==", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.1.0.tgz", + "integrity": "sha512-ZHhHtlxOWSxCoNOKHGbiLzXnl42ga9CxDr27H36Qn+15pQZd3R/F24jrmjDelw9j/iHUIWMWs08/u2QN50HHOg==", "dev": true, "requires": { - "merge-stream": "^1.0.1", - "supports-color": "^6.1.0" + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" }, "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" } } } @@ -4937,37 +6013,50 @@ "dev": true }, "jsdom": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", - "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-15.2.1.tgz", + "integrity": "sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g==", "dev": true, "requires": { "abab": "^2.0.0", - "acorn": "^5.5.3", - "acorn-globals": "^4.1.0", + "acorn": "^7.1.0", + "acorn-globals": "^4.3.2", "array-equal": "^1.0.0", - "cssom": ">= 0.3.2 < 0.4.0", - "cssstyle": "^1.0.0", - "data-urls": "^1.0.0", + "cssom": "^0.4.1", + "cssstyle": "^2.0.0", + "data-urls": "^1.1.0", "domexception": "^1.0.1", - "escodegen": "^1.9.1", + "escodegen": "^1.11.1", "html-encoding-sniffer": "^1.0.2", - "left-pad": "^1.3.0", - "nwsapi": "^2.0.7", - "parse5": "4.0.0", + "nwsapi": "^2.2.0", + "parse5": "5.1.0", "pn": "^1.1.0", - "request": "^2.87.0", - "request-promise-native": "^1.0.5", - "sax": "^1.2.4", + "request": "^2.88.0", + "request-promise-native": "^1.0.7", + "saxes": "^3.1.9", "symbol-tree": "^3.2.2", - "tough-cookie": "^2.3.4", + "tough-cookie": "^3.0.1", "w3c-hr-time": "^1.0.1", + "w3c-xmlserializer": "^1.1.2", "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.3", - "whatwg-mimetype": "^2.1.0", - "whatwg-url": "^6.4.1", - "ws": "^5.2.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^7.0.0", + "ws": "^7.0.0", "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "tough-cookie": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", + "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", + "dev": true, + "requires": { + "ip-regex": "^2.1.0", + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + } } }, "jsesc": { @@ -5001,9 +6090,9 @@ "dev": true }, "json5": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", - "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz", + "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==", "dev": true, "requires": { "minimist": "^1.2.0" @@ -5048,31 +6137,16 @@ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dev": true, - "requires": { - "invert-kv": "^2.0.0" - } - }, "lcov-parse": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz", "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=", "dev": true }, - "left-pad": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", - "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", - "dev": true - }, "leven": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", - "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true }, "levn": { @@ -5104,13 +6178,12 @@ } }, "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "^4.1.0" } }, "lodash": { @@ -5172,6 +6245,12 @@ "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=", "dev": true }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, "lodash.set": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", @@ -5208,21 +6287,21 @@ "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", "dev": true }, + "lolex": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz", + "integrity": "sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, "longest": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/longest/-/longest-2.0.1.tgz", "integrity": "sha1-eB4YMpaqlPbU2RbcM10NF676I/g=", "dev": true }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, "loud-rejection": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", @@ -5243,9 +6322,9 @@ } }, "lunr": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.6.tgz", - "integrity": "sha512-swStvEyDqQ85MGpABCMBclZcLI/pBIlu8FFDtmX197+oEgKloJ67QnB+Tidh0340HmLMs39c4GrkPY3cmkXp6Q==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.8.tgz", + "integrity": "sha512-oxMeX/Y35PNFuZoHp+jUj5OSEmLCaIH4KTFJh7a93cHBoFmpw2IoPs22VIz7vyO2YUnx2Tn9dzIwO2P/4quIRg==", "dev": true }, "macos-release": { @@ -5255,19 +6334,18 @@ "dev": true }, "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz", + "integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==", "dev": true, "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" + "semver": "^6.0.0" }, "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } @@ -5287,15 +6365,6 @@ "tmpl": "1.0.x" } }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -5318,9 +6387,9 @@ } }, "marked": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.7.0.tgz", - "integrity": "sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.8.0.tgz", + "integrity": "sha512-MyUe+T/Pw4TZufHkzAfDj6HarCBWia2y27/bhuYkTaiUnfDYFnCP3KUN+9oM7Wi6JA2rymtVYbQu3spE0GCmxQ==", "dev": true }, "marked-terminal": { @@ -5337,17 +6406,6 @@ "supports-hyperlinks": "^1.0.1" } }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - } - }, "meow": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", @@ -5427,13 +6485,10 @@ "dev": true }, "merge-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", - "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true }, "merge2": { "version": "1.3.0", @@ -5570,13 +6625,6 @@ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", "dev": true }, - "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", - "dev": true, - "optional": true - }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -5648,16 +6696,26 @@ "dev": true }, "node-notifier": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.0.tgz", - "integrity": "sha512-SUDEb+o71XR5lXSTyivXd9J7fCloE3SyP4lSgt3lU2oSANiox+SxlNRGPjDKrwU1YN3ix2KN/VGGCg0t01rttQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-6.0.0.tgz", + "integrity": "sha512-SVfQ/wMw+DesunOm5cKqr6yDcvUTDl/yc97ybGHMrteNEY6oekXpNpS3lZwgLlwz0FLgHoiW28ZpmBHUDg37cw==", "dev": true, + "optional": true, "requires": { "growly": "^1.3.0", - "is-wsl": "^1.1.0", - "semver": "^5.5.0", + "is-wsl": "^2.1.1", + "semver": "^6.3.0", "shellwords": "^0.1.1", - "which": "^1.3.0" + "which": "^1.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "optional": true + } } }, "normalize-package-data": { @@ -5673,13 +6731,10 @@ } }, "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true }, "normalize-url": { "version": "4.5.0", @@ -9187,16 +10242,10 @@ "path-key": "^2.0.0" } }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, "nwsapi": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.4.tgz", - "integrity": "sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", "dev": true }, "oauth-sign": { @@ -9236,6 +10285,12 @@ } } }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", + "dev": true + }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", @@ -9251,14 +10306,26 @@ "isobject": "^3.0.0" } }, - "object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", "dev": true, "requires": { "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" } }, "object.pick": { @@ -9313,36 +10380,17 @@ } }, "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, "requires": { "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", + "fast-levenshtein": "~2.0.6", "levn": "~0.3.0", "prelude-ls": "~1.1.2", "type-check": "~0.3.2", - "wordwrap": "~1.0.0" - }, - "dependencies": { - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - } - } - }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" + "word-wrap": "~1.2.3" } }, "os-name": { @@ -9361,20 +10409,11 @@ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, "p-each-series": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", - "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", - "dev": true, - "requires": { - "p-reduce": "^1.0.0" - } + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.1.0.tgz", + "integrity": "sha512-ZuRs1miPT4HrjFa+9fRfOFXxGJfORgelKV9f9nNOWw2gl6gVsRaVDOQP0+MI0G0wGKns1Yacsu0GjOFbTK0JFQ==", + "dev": true }, "p-filter": { "version": "2.1.0", @@ -9391,12 +10430,6 @@ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "dev": true }, - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", - "dev": true - }, "p-limit": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", @@ -9407,24 +10440,18 @@ } }, "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "^2.2.0" } }, "p-map": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true - }, - "p-reduce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", - "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "dev": true }, "p-retry": { @@ -9476,9 +10503,9 @@ "dev": true }, "parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", + "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==", "dev": true }, "pascalcase": { @@ -9603,12 +10630,12 @@ } }, "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "requires": { - "find-up": "^3.0.0" + "find-up": "^4.0.0" } }, "pn": { @@ -9630,15 +10657,48 @@ "dev": true }, "pretty-format": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.8.0.tgz", - "integrity": "sha512-P952T7dkrDEplsR+TuY7q3VXDae5Sr7zmQb12JU/NDQa/3CH7/QW0yvqLcGN6jL+zQFKaoJcPc+yJxMTGmosqw==", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.1.0.tgz", + "integrity": "sha512-46zLRSGLd02Rp+Lhad9zzuNZ+swunitn8zIpfD2B4OPCRLXbM87RJT2aBLBWYOznNUML/2l/ReMyWNC80PJBUQ==", "dev": true, "requires": { - "@jest/types": "^24.8.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" + "@jest/types": "^25.1.0", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^16.12.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } } }, "process-nextick-args": { @@ -9654,13 +10714,13 @@ "dev": true }, "prompts": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.1.0.tgz", - "integrity": "sha512-+x5TozgqYdOwWsQFZizE/Tra3fKvAoy037kOyU6cgz84n8f6zxngLOV4O32kTwt9FcLCxAqw0P/c8rOr9y+Gfg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.0.tgz", + "integrity": "sha512-NfbbPPg/74fT7wk2XYQ7hAIp9zJyZp5Fu19iRbORqqy1BhtrkZ0fPafBU+7bmn8ie69DpT0R6QpJIN2oisYjJg==", "dev": true, "requires": { - "kleur": "^3.0.2", - "sisteransi": "^1.0.0" + "kleur": "^3.0.3", + "sisteransi": "^1.0.3" } }, "psl": { @@ -9716,9 +10776,9 @@ } }, "react-is": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", - "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==", + "version": "16.12.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.12.0.tgz", + "integrity": "sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==", "dev": true }, "read-pkg": { @@ -9732,16 +10792,6 @@ "path-type": "^3.0.0" } }, - "read-pkg-up": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", - "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", - "dev": true, - "requires": { - "find-up": "^3.0.0", - "read-pkg": "^3.0.0" - } - }, "readable-stream": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", @@ -9896,21 +10946,21 @@ } }, "request-promise-core": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz", - "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz", + "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==", "dev": true, "requires": { - "lodash": "^4.17.11" + "lodash": "^4.17.15" } }, "request-promise-native": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz", - "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz", + "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==", "dev": true, "requires": { - "request-promise-core": "1.1.2", + "request-promise-core": "1.1.3", "stealthy-require": "^1.1.1", "tough-cookie": "^2.3.3" } @@ -9937,12 +10987,20 @@ } }, "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, "requires": { - "resolve-from": "^3.0.0" + "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } } }, "resolve-dir": { @@ -10029,9 +11087,9 @@ "dev": true }, "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.1.tgz", + "integrity": "sha512-IQ4ikL8SjBiEDZfk+DFVwqRK8md24RWMEJkdSlgNLkyyAImcjf8SWvU1qFMDOb4igBClbTQ/ugPqXcRwdFTxZw==", "dev": true, "requires": { "glob": "^7.1.3" @@ -10103,13 +11161,37 @@ "micromatch": "^3.1.4", "minimist": "^1.1.1", "walker": "~1.0.5" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } } }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true + "saxes": { + "version": "3.1.11", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz", + "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==", + "dev": true, + "requires": { + "xmlchars": "^2.1.1" + } }, "semantic-release": { "version": "15.13.24", @@ -10453,7 +11535,8 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true + "dev": true, + "optional": true }, "signal-exit": { "version": "3.0.2", @@ -10484,15 +11567,15 @@ } }, "sisteransi": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.2.tgz", - "integrity": "sha512-ZcYcZcT69nSLAR2oLN2JwNmLkJEKGooFMCdvOkFrToUt/WfcRWqhIg4P4KwY4dmLbuyXIx4o4YmPsvMRJYJd/w==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.4.tgz", + "integrity": "sha512-/ekMoM4NJ59ivGSfKapeG+FWtrmWvA1p6FBZwXrqojw90vJu8lBmrTxCMuBCydKtkaUe2zt4PlxeTKpjwMbyig==", "dev": true }, "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, "snapdragon": { @@ -10643,9 +11726,9 @@ } }, "source-map-support": { - "version": "0.5.12", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", - "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", + "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -10796,30 +11879,13 @@ } }, "string-length": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", - "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-3.1.0.tgz", + "integrity": "sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==", "dev": true, "requires": { "astral-regex": "^1.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } + "strip-ansi": "^5.2.0" } }, "string-width": { @@ -10849,6 +11915,26 @@ } } }, + "string.prototype.trimleft": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", + "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", + "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -10963,16 +12049,83 @@ } } }, + "terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.0.tgz", + "integrity": "sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-hyperlinks": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.0.0.tgz", + "integrity": "sha512-bFhn0MQ8qefLyJ3K7PpHiPUTuTVPWw6RXfaMeV6xgJLXtBbszyboz1bvGTVv4R0YpQm2DqlXXn0fFHhxUHVE5w==", + "dev": true, + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, "test-exclude": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", - "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, "requires": { - "glob": "^7.1.3", - "minimatch": "^3.0.4", - "read-pkg-up": "^4.0.0", - "require-main-filename": "^2.0.0" + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "dependencies": { + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } } }, "text-extensions": { @@ -10982,9 +12135,9 @@ "dev": true }, "throat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", - "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", "dev": true }, "through": { @@ -11111,22 +12264,17 @@ "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=", "dev": true }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, "ts-jest": { - "version": "24.0.2", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-24.0.2.tgz", - "integrity": "sha512-h6ZCZiA1EQgjczxq+uGLXQlNgeg02WWJBbeT8j6nyIBRQdglqbvzDoHahTEIiS6Eor6x8mK6PfZ7brQ9Q6tzHw==", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-25.1.0.tgz", + "integrity": "sha512-1Lf576ulKhbxX5og+tG8udVg/5cgcMLPBxp1iCqbbf6VvUK4gEsgAtzMjl8u98izhLrzKMPB0LxCBKEZ5l19Hw==", "dev": true, "requires": { "bs-logger": "0.x", "buffer-from": "1.x", "fast-json-stable-stringify": "2.x", "json5": "2.x", + "lodash.memoize": "4.x", "make-error": "1.x", "mkdirp": "0.x", "resolve": "1.x", @@ -11259,48 +12407,55 @@ "prelude-ls": "~1.1.2" } }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, "type-fest": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, "typedoc": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.15.0.tgz", - "integrity": "sha512-NOtfq5Tis4EFt+J2ozhVq9RCeUnfEYMFKoU6nCXCXUULJz1UQynOM+yH3TkfZCPLzigbqB0tQYGVlktUWweKlw==", + "version": "0.16.9", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.16.9.tgz", + "integrity": "sha512-UvOGoy76yqwCXwxPgatwgXWfsQ3FczyZ6ZNLjhCPK+TsDir6LiU3YB6N9XZmPv36E+7LA860mnc8a0v6YADKFw==", "dev": true, "requires": { "@types/minimatch": "3.0.3", "fs-extra": "^8.1.0", - "handlebars": "^4.1.2", - "highlight.js": "^9.15.8", + "handlebars": "^4.7.2", + "highlight.js": "^9.17.1", "lodash": "^4.17.15", - "marked": "^0.7.0", + "marked": "^0.8.0", "minimatch": "^3.0.0", "progress": "^2.0.3", "shelljs": "^0.8.3", - "typedoc-default-themes": "^0.6.0", - "typescript": "3.5.x" - }, - "dependencies": { - "typescript": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz", - "integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g==", - "dev": true - } + "typedoc-default-themes": "^0.7.2", + "typescript": "3.7.x" } }, "typedoc-default-themes": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/typedoc-default-themes/-/typedoc-default-themes-0.6.0.tgz", - "integrity": "sha512-MdTROOojxod78CEv22rIA69o7crMPLnVZPefuDLt/WepXqJwgiSu8Xxq+H36x0Jj3YGc7lOglI2vPJ2GhoOybw==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/typedoc-default-themes/-/typedoc-default-themes-0.7.2.tgz", + "integrity": "sha512-fiFKlFO6VTqjcno8w6WpTsbCgXmfPHVjnLfYkmByZE7moaz+E2DSpAT+oHtDHv7E0BM5kAhPrHJELP2J2Y2T9A==", "dev": true, "requires": { "backbone": "^1.4.0", "jquery": "^3.4.1", - "lunr": "^2.3.6", + "lunr": "^2.3.8", "underscore": "^1.9.1" } }, @@ -11331,9 +12486,9 @@ } }, "underscore": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", - "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.2.tgz", + "integrity": "sha512-D39qtimx0c1fI3ya1Lnhk3E9nONswSKhnffBI0gME9C99fYOkNi04xs8K6pePLhvl1frbDemkaBQ5ikWllR2HQ==", "dev": true }, "union-value": { @@ -11446,21 +12601,42 @@ "dev": true }, "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" } }, "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "dev": true }, + "v8-to-istanbul": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-4.0.1.tgz", + "integrity": "sha512-x0yZvZAkjJwdD3fPiJzYP37aod0ati4LlmD2RmpKjqewjKAov/u/ytZ8ViIZb07cN4cePKzl9ijiUi7C1LQ8hQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -11491,6 +12667,17 @@ "browser-process-hrtime": "^0.1.2" } }, + "w3c-xmlserializer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz", + "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==", + "dev": true, + "requires": { + "domexception": "^1.0.1", + "webidl-conversions": "^4.0.2", + "xml-name-validator": "^3.0.0" + } + }, "walker": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", @@ -11522,9 +12709,9 @@ "dev": true }, "whatwg-url": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", - "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", "dev": true, "requires": { "lodash.sortby": "^4.7.0", @@ -11569,48 +12756,77 @@ "dev": true }, "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "dependencies": { "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" } }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" } }, "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^5.0.0" } } } @@ -11622,24 +12838,22 @@ "dev": true }, "write-file-atomic": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", - "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.1.tgz", + "integrity": "sha512-JPStrIyyVJ6oCSz/691fAjFtefZ6q+fP6tm+OS4Qw6o+TGQxNp1ziY2PgS+X/m0V8OWhZiO/m4xSj+Pr4RrZvw==", "dev": true, "requires": { - "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" } }, "ws": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.1.tgz", + "integrity": "sha512-sucePNSafamSKoOqoNfBd8V0StlkzJKL2ZAhGQinCfNQ+oacw+Pk7lcdAElecBF2VkLNZRiIb5Oi1Q5lVUVt2A==", + "dev": true }, "xml-name-validator": { "version": "3.0.0", @@ -11647,6 +12861,12 @@ "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", "dev": true }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -11666,37 +12886,68 @@ "dev": true }, "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.1.0.tgz", + "integrity": "sha512-T39FNN1b6hCW4SOIk1XyTOWxtXdcen0t+XYrysQmChzSipvhBO8Bj0nK1ozAasdk24dNWuMZvr4k24nz+8HHLg==", "dev": true, "requires": { - "cliui": "^4.0.0", + "cliui": "^6.0.0", "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", + "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", - "string-width": "^2.0.0", + "string-width": "^4.2.0", "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" + "y18n": "^4.0.0", + "yargs-parser": "^16.1.0" }, "dependencies": { - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } } } }, "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-16.1.0.tgz", + "integrity": "sha512-H/V41UNZQPkUMIT5h5hiwg4QKIY1RPvoBV4XcjUbRM8Bk2oKqqyZ0DIEbTFZB0XjbtSPG8SAa/0DxCQmiRgzKg==", "dev": true, "requires": { "camelcase": "^5.0.0", diff --git a/package.json b/package.json index 2dda6be..7683f65 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "scripts": { "cz": "git-cz", "clean": "rm -rf dist", - "docs": "typedoc --out docs/api src/ --ignoreCompilerErrors --mode file --hideGenerator --includes docs/assets", + "docs": "typedoc --out docs/api src/ --mode file --gitRevision master --hideGenerator --media docs/assets --exclude \"**/*+.spec.ts\"", "build": "tsc", "watch": "tsc -w", "lint": "tslint --project . \"src/**/*.ts\"", @@ -33,7 +33,7 @@ "test": "npm run test:unit", "test:unit": "jest --coverage --verbose --passWithNoTests", "test:ci": "npm run test:unit -- --coverageReporters=text-lcov | coveralls", - "test:integration": "jest --config ./integration/jest.config.js --forceExit --detectOpenHandles", + "test:integration": "jest --config ./integration/jest.config.js --forceExit --detectOpenHandles --verbose", "test:unit:watch": "jest --watch", "prepublishOnly": "npm run check && npm run build", "semantic-release": "semantic-release" @@ -44,22 +44,22 @@ "devDependencies": { "@semantic-release/changelog": "^3.0.4", "@semantic-release/git": "^7.0.16", - "@types/faker": "^4.1.9", - "@types/ioredis": "^4.14.4", - "@types/jest": "^24.0.15", + "@types/ioredis": "^4.14.6", + "@types/jest": "^25.1.1", "@types/lodash": "^4.14.149", "@types/node": "^8", + "@types/uuid": "^3.4.7", "coveralls": "^3.0.4", "cz-conventional-changelog": "^3.0.2", - "faker": "^4.1.0", "ioredis": "^4.14.1", - "jest": "^24.8.0", + "jest": "^25.1.0", "semantic-release": "^15.13.24", - "ts-jest": "^24.0.2", + "ts-jest": "^25.1.0", "tslint": "^5.18.0", "tslint-config-unional": "^0.10.0", - "typedoc": "^0.15.0", - "typescript": "^3.7.5" + "typedoc": "^0.16.9", + "typescript": "^3.7.5", + "uuid": "^3.4.0" }, "config": { "commitizen": { diff --git a/src/adapters/redis/index.ts b/src/adapters/redis/index.ts index 4cf4b33..8a6cc6a 100644 --- a/src/adapters/redis/index.ts +++ b/src/adapters/redis/index.ts @@ -1,5 +1,7 @@ import { Redis } from 'ioredis'; +import _, { partial } from 'lodash'; import { ConnectionStatus } from '../../connection-status'; +import serialize from '../../serialize'; import { StorageAdapter } from '../../storage-adapter'; import { withTimeout } from '../../with-timeout'; @@ -10,13 +12,15 @@ export const CACHE_PREFIX = 'cache'; export const DEFAULT_OPERATION_TIMEOUT = 150; export const DEFAULT_LOCK_EXPIRES = 20000; -export type CommandArgument = string | number; - export type RedisStorageAdapterOptions = { operationTimeout?: number; lockExpireTimeout?: number; }; +function cacheKey(key: string): string { + return `${CACHE_PREFIX}:${key}`; +} + /** * Redis adapter for Manager. Implements the StorageAdapter interface */ @@ -34,6 +38,8 @@ export class RedisStorageAdapter implements StorageAdapter { this.redisInstance.on('ready', () => this.setConnectionStatus(ConnectionStatus.CONNECTED)); this.redisInstance.on('reconnecting', () => this.setConnectionStatus(ConnectionStatus.CONNECTING)); this.redisInstance.on('end', () => this.setConnectionStatus(ConnectionStatus.DISCONNECTED)); + + this.withTimeout = partial(withTimeout, _, this.options.operationTimeout); } /** @@ -51,6 +57,8 @@ export class RedisStorageAdapter implements StorageAdapter { */ private connectionStatus: ConnectionStatus = ConnectionStatus.DISCONNECTED; + private readonly withTimeout: (promise: Promise) => Promise; + /** * Returns the status of the connection with redis (see StorageAdapter) */ @@ -70,13 +78,11 @@ export class RedisStorageAdapter implements StorageAdapter { * Use set command to set hash value in radish */ public async set(key: string, value: string, expiresIn?: number): Promise { - const cacheKey = `${CACHE_PREFIX}:${key}`; - const setPromise = expiresIn ? - this.redisInstance.set(cacheKey, value, 'PX', expiresIn) : - this.redisInstance.set(cacheKey, value); + this.redisInstance.set(cacheKey(key), value, 'PX', expiresIn) : + this.redisInstance.set(cacheKey(key), value); - return Boolean(await withTimeout(setPromise, this.options.operationTimeout)); + return Boolean(await this.withTimeout(setPromise)); } /** @@ -85,16 +91,16 @@ export class RedisStorageAdapter implements StorageAdapter { public async mset(values: Map): Promise { const data = new Map(); for (const [key, value] of values.entries()) { - data.set(`${CACHE_PREFIX}:${key}`, value); + data.set(cacheKey(key), value); } - await withTimeout(this.redisInstance.mset(data), this.options.operationTimeout); + await this.withTimeout(this.redisInstance.mset(data)); } /** * The get command method provided by the adapter. Use get command to get key value from redis */ public async get(key: string): Promise { - return withTimeout(this.redisInstance.get(`${CACHE_PREFIX}:${key}`), this.options.operationTimeout); + return this.withTimeout(this.redisInstance.get(cacheKey(key))); } /** @@ -102,28 +108,49 @@ export class RedisStorageAdapter implements StorageAdapter { * Use mget command to get multiple values from redis */ public async mget(keys: string[]): Promise<(string | null)[]> { - const cacheKeys = keys.map(key => `${CACHE_PREFIX}:${key}`); - return withTimeout(this.redisInstance.mget(...cacheKeys), this.options.operationTimeout); + const cacheKeys = keys.map(key => cacheKey(key)); + return this.withTimeout(this.redisInstance.mget(...cacheKeys)); + } + + public async addToSet(key: string, values: string[]): Promise { + await this.withTimeout(this.redisInstance.sadd(cacheKey(key), ...values)); + } + + public async deleteFromSet(key: string, values: string[]): Promise { + await this.withTimeout(this.redisInstance.srem(cacheKey(key), ...values)); + } + + /** + * The trick is that this method stores values to temporary set and + * then uses Redis to make the intersection of this set with set stored in key. + */ + public async intersectWithSet(key: string, values: string[]): Promise> { + const temporarySetName = `temporary-set:${serialize(values)}`; + await this.withTimeout(this.redisInstance.del(temporarySetName)); + await this.withTimeout(this.redisInstance.sadd(temporarySetName, ...values)); + const intersection = await this.withTimeout(this.redisInstance.sinter(cacheKey(key), temporarySetName)); + + return new Set(intersection); } /** * The del method provided by the adapter. Uses the del command to remove the key. */ public async del(key: string): Promise { - return withTimeout(this.redisInstance.del(`${CACHE_PREFIX}:${key}`), this.options.operationTimeout); + await this.withTimeout(this.redisInstance.del(cacheKey(key))); } /** * Set the lock on the key */ public async acquireLock(key: string): Promise { - const setResult = await withTimeout(this.redisInstance.set( + const setResult = await this.withTimeout(this.redisInstance.set( `${key}_lock`, '', 'PX', this.options.lockExpireTimeout, 'NX' - ), this.options.operationTimeout); + )); return setResult === 'OK'; } @@ -132,7 +159,7 @@ export class RedisStorageAdapter implements StorageAdapter { * Unlocks the key */ public async releaseLock(key: string): Promise { - const deletedKeys = await withTimeout(this.redisInstance.del(`${key}_lock`), this.options.operationTimeout); + const deletedKeys = await this.withTimeout(this.redisInstance.del(`${key}_lock`)); return deletedKeys > 0; } @@ -141,7 +168,7 @@ export class RedisStorageAdapter implements StorageAdapter { * Checks if key is locked */ public async isLockExists(key: string): Promise { - const lockExists = await withTimeout(this.redisInstance.exists(`${key}_lock`), this.options.operationTimeout); + const lockExists = await this.withTimeout(this.redisInstance.exists(`${key}_lock`)); return lockExists === 1; } diff --git a/src/adapters/redis/redis.spec.ts b/src/adapters/redis/redis.spec.ts index e04b69d..caa8a77 100644 --- a/src/adapters/redis/redis.spec.ts +++ b/src/adapters/redis/redis.spec.ts @@ -177,4 +177,46 @@ describe('Redis adapter', () => { expect((mock as any).mget).toHaveBeenCalledTimes(1); expect((mock as any).mget).toHaveBeenCalledWith('cache:some1', 'cache:some2'); }); + + it('addToSet calls sadd', async () => { + const key = 'key'; + const value = 'value'; + (mock as any).sadd = jest.fn().mockImplementation(); + + await adapter.addToSet(key, [value]); + + expect((mock as any).sadd).toHaveBeenCalledTimes(1); + expect((mock as any).sadd).toHaveBeenCalledWith('cache:key', value); + }); + + it('deleteFromSet calls srem', async () => { + const key = 'key'; + const value = 'value'; + (mock as any).srem = jest.fn().mockImplementation(); + + await adapter.deleteFromSet(key, [value]); + + expect((mock as any).srem).toHaveBeenCalledTimes(1); + expect((mock as any).srem).toHaveBeenCalledWith('cache:key', value); + }); + + it('intersectWithSet calls del, sadd, sinter', async () => { + const key = 'key'; + const value = 'value'; + const temporarySetName = 'temporary-set:["value"]'; + (mock as any).del = jest.fn(); + (mock as any).sadd = jest.fn(); + (mock as any).sinter = jest.fn(); + + await adapter.intersectWithSet(key, [value]); + + expect((mock as any).del).toHaveBeenCalledTimes(1); + expect((mock as any).del).toHaveBeenCalledWith(temporarySetName); + + expect((mock as any).sadd).toHaveBeenCalledTimes(1); + expect((mock as any).sadd).toHaveBeenCalledWith(temporarySetName, value); + + expect((mock as any).sinter).toHaveBeenCalledTimes(1); + expect((mock as any).sinter).toHaveBeenCalledWith(`cache:${key}`, temporarySetName); + }); }); diff --git a/src/adapters/test/index.ts b/src/adapters/test/index.ts index 545965e..0c9897c 100644 --- a/src/adapters/test/index.ts +++ b/src/adapters/test/index.ts @@ -84,6 +84,38 @@ class TestStorageAdapter implements StorageAdapter { return keys.map(key => this.testInterface.internalStorage[key] ?? null); } + + async addToSet(key: string, values: string[]): Promise { + let set = this.testInterface.internalStorage[key]; + if (set instanceof Set) { + values.forEach(value => set.add(value)); + } else { + set = new Set(values); + } + + this.testInterface.internalStorage[key] = set; + } + + async deleteFromSet(key: string, values: string[]): Promise { + const set = this.testInterface.internalStorage[key]; + if (set instanceof Set) { + values.forEach(value => set.delete(value)); + } + } + + private async getSetValues(key: string): Promise> { + const set = this.testInterface.internalStorage[key]; + if (set instanceof Set) { + return set; + } + return new Set(); + } + + async intersectWithSet(key: string, values: string[]): Promise> { + const set = await this.getSetValues(key); + + return new Set(values.filter(x => set.has(x))); + } } export default TestStorageAdapter; diff --git a/src/record/create-tag.spec.ts b/src/record/create-tag.spec.ts index 4160379..bdf7f99 100644 --- a/src/record/create-tag.spec.ts +++ b/src/record/create-tag.spec.ts @@ -7,4 +7,11 @@ describe('createTag', () => { expect(newTag.name).toEqual('tag'); expect(newTag.version).toEqual(expect.any(Number)); }); + + it('creates tag with name equal to input key and specified version', () => { + const newTag = createTag('tag', 2); + + expect(newTag.name).toEqual('tag'); + expect(newTag.version).toEqual(2); + }); }); diff --git a/src/record/create-tag.ts b/src/record/create-tag.ts index f89e11c..d98436b 100644 --- a/src/record/create-tag.ts +++ b/src/record/create-tag.ts @@ -1,6 +1,6 @@ import { StorageRecordTag } from '../storage'; -export default (tagName: string): StorageRecordTag => ({ +export default (tagName: string, version?: number): StorageRecordTag => ({ name: tagName, - version: Date.now() + version: version ?? Date.now() }); diff --git a/src/record/index.ts b/src/record/index.ts index d8dc8ac..2809b19 100644 --- a/src/record/index.ts +++ b/src/record/index.ts @@ -25,8 +25,3 @@ export default function createRecord ( return record; } - -export interface RecordErrorContext { - record: StorageRecord; - recordValue: any; -} diff --git a/src/storage-adapter.ts b/src/storage-adapter.ts index 906c38e..68e5d0f 100644 --- a/src/storage-adapter.ts +++ b/src/storage-adapter.ts @@ -52,6 +52,21 @@ export interface StorageAdapter { */ mget(keys: string[]): Promise<(string | null)[]>; + /** + * Adds values to the set + */ + addToSet(key: string, values: string[]): Promise; + + /** + * Deletes values from the set + */ + deleteFromSet(key: string, values: string[]): Promise; + + /** + * Returns set intersection with values + */ + intersectWithSet(key: string, values: string[]): Promise>; + /** * Removes the entry with the key key from storage */ diff --git a/src/storage.ts b/src/storage.ts index d7a91e7..87af10b 100644 --- a/src/storage.ts +++ b/src/storage.ts @@ -8,7 +8,7 @@ import { ConnectionStatus } from './connection-status'; */ export interface Storage { get(key: string): Promise; - touch(tags: string[]): Promise; + touch(tags: string[]): Promise; lockKey(key: string): Promise; releaseKey(key: string): Promise; keyIsLocked(key: string): Promise; diff --git a/src/storages/base.spec.ts b/src/storages/base.spec.ts index f3b3edd..62f05db 100644 --- a/src/storages/base.spec.ts +++ b/src/storages/base.spec.ts @@ -341,4 +341,49 @@ describe('BaseStorage', () => { await storage.setTagVersions([tagV2]); await expect(storage.getTags([tag1.name])).resolves.toEqual([tagV2]); }); + + it('getTags uses not touched cache set', async () => { + const notTouchedTag = 'notTouchedTag'; + testInterface.internalStorage['not-touched-tags'] = new Set([notTouchedTag]); + + const tag1 = { name: 'tag1', version: 1 }; + testInterface.internalStorage[`cache-${TAGS_VERSIONS_ALIAS}:tag1`] = tag1.version; + + await expect(storage.getTags([notTouchedTag])).resolves.toEqual([{ name: notTouchedTag, version: 0 }]); + expect(testInterface.internalStorage[`cache-${TAGS_VERSIONS_ALIAS}:tag1`]).toEqual(tag1.version); + }); + + it('getTags correct handles empty tags list', async () => { + await expect(storage.getTags([])).resolves.toEqual([]); + }); + + it('set does not save not touched tags', async () => { + const notTouchedTag = 'notTouchedTag'; + testInterface.internalStorage['not-touched-tags'] = new Set([notTouchedTag]); + await storage.set('test', 'value', { tags: [notTouchedTag] }); + + expect(testInterface.internalStorage['not-touched-tags']).toEqual(new Set([notTouchedTag])); + }); + + it('set saves non existing tags to not touched tags', async () => { + const nonExisting = 'nonExisting'; + await storage.set('test', 'value', { tags: [nonExisting] }); + + expect(testInterface.internalStorage['not-touched-tags']).toEqual(new Set([nonExisting])); + }); + + it('set does not save existing tags to not touched tags', async () => { + const tag1 = { name: 'tag1', version: 1 }; + testInterface.internalStorage[`cache-${TAGS_VERSIONS_ALIAS}:tag1`] = tag1.version; + + await storage.set('test', 'value', { tags: [tag1.name] }); + + expect(testInterface.internalStorage['not-touched-tags']).toBeUndefined(); + expect(testInterface.internalStorage[`cache-${TAGS_VERSIONS_ALIAS}:tag1`]).toEqual(tag1.version); + }); + + it('setTagVersions does not call mset if values are empty', async () => { + await storage.setTagVersions([]); + expect(testInterface.internalStorage).toEqual({}); + }); }); diff --git a/src/storages/base.ts b/src/storages/base.ts index bdfb3e6..da6bbeb 100644 --- a/src/storages/base.ts +++ b/src/storages/base.ts @@ -11,6 +11,10 @@ import { StorageAdapter } from '../storage-adapter'; export const TAGS_VERSIONS_ALIAS = 'cache-tags-versions'; +export const NOT_TOUCHED_TAGS_CACHE_KEY = 'not-touched-tags'; + +const NON_EXISTING_TAG_VERSION = 0; + export type BaseStorageOptions = { adapter: StorageAdapter; tagsAdapter?: StorageAdapter; @@ -100,16 +104,25 @@ export class BaseStorage implements Storage { /** * Creates new set of tag records and updates them. */ - public async setTagVersions(tags: StorageRecordTag[]): Promise { + public async setTagVersions(tags: StorageRecordTag[]): Promise { + if (tags.length === 0) { + return; + } + const values = new Map(tags.map(tag => [this.createTagKey(tag.name), `${tag.version}`])); return this.tagsAdapter.mset(values); } /** * Invalidates tags given as array of strings. + * + * See [diagram](media://images/not-touched-tags-optimization/touch.png) */ - public async touch(tags: string[]): Promise { - return this.cachedCommand(this.setTagVersions.bind(this), tags.map(createTag)); + public async touch(tags: string[]): Promise { + await Promise.all([ + this.cachedCommand(this.setTagVersions.bind(this), tags.map(tag => createTag(tag))), + this.deleteNotTouchedTags(tags) + ]); } /** @@ -141,20 +154,27 @@ export class BaseStorage implements Storage { } /** - * Retrieves actual versions of tags from storage. Tags which was not found in storage will be created with 0 - * version. + * Retrieves actual versions of tags from storage. + * Optimization used: first filter tag names with not touched tags set. + * Tags which was not found in storage will be created with 0 version. + * + * See [diagram](media://images/not-touched-tags-optimization/get_tags.png) */ public async getTags(tagNames: string[]): Promise { - const existingTags = await this.tagsAdapter.mget(tagNames.map(tagName => this.createTagKey(tagName))); + const notTouchedTags = await this.filterNotTouchedTags(tagNames); + const tags: StorageRecordTag[] = []; + notTouchedTags.forEach(name => tags.push(createTag(name, NON_EXISTING_TAG_VERSION))); - return tagNames.map((tagName, index) => ({ - name: tagName, - version: Number(existingTags[index]) || 0 - })); + const tagsToRequest = tagNames.filter(name => !notTouchedTags.has(name)); + const existingTags = await this.getActualTags(tagsToRequest); + + return tags.concat(existingTags); } /** * set creates new record with provided options and sets it to storage using the adapter. + * + * See [diagram](media://images/not-touched-tags-optimization/touch.png) */ public async set(key: string, value: StorageRecordValue, options: WriteOptions = {}): Promise { let tags: string[] = []; @@ -169,7 +189,9 @@ export class BaseStorage implements Storage { throw new TypeError(`getTags should return an array of strings, got ${typeof dynamicTags}`); } - const record = createRecord(key, value, uniq(tags.concat(dynamicTags)).map(createTag), options); + const record = createRecord(key, value, uniq(tags.concat(dynamicTags)).map(tag => createTag(tag)), options); + + await this.saveNotTouchedTags(record.tags); await this.adapter.set( this.createKey(key), @@ -250,4 +272,61 @@ export class BaseStorage implements Storage { return fn(...args); } + + /** + * Saves only new not touched tags in tag storage. + */ + private async saveNotTouchedTags(recordTags: StorageRecordTag[]): Promise { + const allTags = recordTags.map(tag => tag.name); + const notTouchedTags = await this.filterNotTouchedTags(allTags); + const unknownTags = allTags.filter(tag => !notTouchedTags.has(tag)); + + const gotTags = await this.getActualTags(unknownTags); + const nonExistingTags = gotTags.filter(tag => tag.version === NON_EXISTING_TAG_VERSION); + + await this.addNotTouchedTags(nonExistingTags.map(tag => tag.name)); + } + + /** + * Gets actual tags from storage. + * It only searches tags stored as separate records. + */ + private async getActualTags(tagNames: string[]): Promise { + if (tagNames.length === 0) { + return []; + } + const tags = await this.tagsAdapter.mget(tagNames.map(tagName => this.createTagKey(tagName))); + + return tagNames.map((tagName, index) => createTag(tagName, Number(tags[index]) || NON_EXISTING_TAG_VERSION)); + } + + /** + * Adds specified tags into not touched tags special set + */ + private async addNotTouchedTags(tags: string[]): Promise { + if (tags.length === 0) { + return; + } + + return this.tagsAdapter.addToSet(NOT_TOUCHED_TAGS_CACHE_KEY, tags); + } + + /** + * Deletes specified tags from not touched tags special set + */ + private async deleteNotTouchedTags(tags: string[]): Promise { + return this.tagsAdapter.deleteFromSet(NOT_TOUCHED_TAGS_CACHE_KEY, tags); + } + + /** + * Filter specified tags with not touched tags special set. + * In other words it returns intersection of specified tags and special tags set in storage. + */ + private async filterNotTouchedTags(tags: string[]): Promise> { + if (tags.length === 0) { + return new Set([]); + } + + return this.tagsAdapter.intersectWithSet(NOT_TOUCHED_TAGS_CACHE_KEY, tags); + } } diff --git a/src/with-timeout.ts b/src/with-timeout.ts index 57a2861..3d2391e 100644 --- a/src/with-timeout.ts +++ b/src/with-timeout.ts @@ -1,7 +1,7 @@ import { OperationTimeoutError } from './errors'; -export const withTimeout = async (promise: Promise, timeout: number): Promise => { - const timeoutPromise = new Promise((resolveTimeout, rejectTimeout): void => { +export const withTimeout = async (promise: Promise, timeout: number): Promise => { + const timeoutPromise = new Promise((resolveTimeout, rejectTimeout): void => { setTimeout(() => { rejectTimeout(OperationTimeoutError(timeout)); }, timeout);