Launch Week Day 5: Introducing Reachability for PHP.Learn More
Socket
Book a DemoSign in
Socket

lru-memoize

Package Overview
Dependencies
Maintainers
1
Versions
6
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

lru-memoize - npm Package Compare versions

Comparing version
1.0.1
to
1.0.2
+1
.nyc_output/80c83628aa45d08581d09ac2c8390832.json
{}
{"/Users/erik/oss/lru-memoize/src/deepEquals.js":{"path":"/Users/erik/oss/lru-memoize/src/deepEquals.js","statementMap":{"0":{"start":{"line":3,"column":0},"end":{"line":3,"column":26}},"1":{"start":{"line":5,"column":14},"end":{"line":5,"column":268}},"2":{"start":{"line":5,"column":101},"end":{"line":5,"column":119}},"3":{"start":{"line":5,"column":141},"end":{"line":5,"column":266}},"4":{"start":{"line":7,"column":0},"end":{"line":7,"column":29}},"5":{"start":{"line":8,"column":13},"end":{"line":10,"column":1}},"6":{"start":{"line":9,"column":2},"end":{"line":9,"column":59}},"7":{"start":{"line":13,"column":4},"end":{"line":15,"column":5}},"8":{"start":{"line":14,"column":6},"end":{"line":14,"column":18}},"9":{"start":{"line":17,"column":4},"end":{"line":31,"column":5}},"10":{"start":{"line":18,"column":6},"end":{"line":20,"column":7}},"11":{"start":{"line":19,"column":8},"end":{"line":19,"column":21}},"12":{"start":{"line":23,"column":6},"end":{"line":27,"column":7}},"13":{"start":{"line":24,"column":8},"end":{"line":24,"column":42}},"14":{"start":{"line":26,"column":8},"end":{"line":26,"column":21}},"15":{"start":{"line":30,"column":6},"end":{"line":30,"column":18}},"16":{"start":{"line":33,"column":4},"end":{"line":35,"column":5}},"17":{"start":{"line":34,"column":6},"end":{"line":34,"column":19}},"18":{"start":{"line":37,"column":4},"end":{"line":67,"column":5}},"19":{"start":{"line":38,"column":6},"end":{"line":40,"column":7}},"20":{"start":{"line":39,"column":8},"end":{"line":39,"column":21}},"21":{"start":{"line":42,"column":20},"end":{"line":42,"column":35}},"22":{"start":{"line":43,"column":20},"end":{"line":43,"column":35}},"23":{"start":{"line":44,"column":6},"end":{"line":46,"column":7}},"24":{"start":{"line":45,"column":8},"end":{"line":45,"column":35}},"25":{"start":{"line":48,"column":18},"end":{"line":48,"column":37}},"26":{"start":{"line":49,"column":18},"end":{"line":49,"column":37}},"27":{"start":{"line":51,"column":6},"end":{"line":53,"column":7}},"28":{"start":{"line":52,"column":8},"end":{"line":52,"column":21}},"29":{"start":{"line":56,"column":28},"end":{"line":56,"column":55}},"30":{"start":{"line":59,"column":6},"end":{"line":63,"column":7}},"31":{"start":{"line":60,"column":8},"end":{"line":60,"column":107}},"32":{"start":{"line":62,"column":8},"end":{"line":62,"column":21}},"33":{"start":{"line":66,"column":6},"end":{"line":66,"column":18}},"34":{"start":{"line":68,"column":4},"end":{"line":68,"column":17}},"35":{"start":{"line":71,"column":2},"end":{"line":71,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":5,"column":84},"end":{"line":5,"column":85}},"loc":{"start":{"line":5,"column":99},"end":{"line":5,"column":121}},"line":5},"1":{"name":"(anonymous_1)","decl":{"start":{"line":5,"column":124},"end":{"line":5,"column":125}},"loc":{"start":{"line":5,"column":139},"end":{"line":5,"column":268}},"line":5},"2":{"name":"hasOwn","decl":{"start":{"line":8,"column":22},"end":{"line":8,"column":28}},"loc":{"start":{"line":8,"column":42},"end":{"line":10,"column":1}},"line":8},"3":{"name":"deepEquals","decl":{"start":{"line":11,"column":9},"end":{"line":11,"column":19}},"loc":{"start":{"line":11,"column":41},"end":{"line":72,"column":1}},"line":11},"4":{"name":"deep","decl":{"start":{"line":12,"column":11},"end":{"line":12,"column":15}},"loc":{"start":{"line":12,"column":32},"end":{"line":69,"column":3}},"line":12},"5":{"name":"(anonymous_5)","decl":{"start":{"line":23,"column":24},"end":{"line":23,"column":25}},"loc":{"start":{"line":23,"column":48},"end":{"line":25,"column":7}},"line":23},"6":{"name":"(anonymous_6)","decl":{"start":{"line":59,"column":23},"end":{"line":59,"column":24}},"loc":{"start":{"line":59,"column":39},"end":{"line":61,"column":7}},"line":59}},"branchMap":{"0":{"loc":{"start":{"line":5,"column":14},"end":{"line":5,"column":268}},"type":"cond-expr","locations":[{"start":{"line":5,"column":84},"end":{"line":5,"column":121}},{"start":{"line":5,"column":124},"end":{"line":5,"column":268}}],"line":5},"1":{"loc":{"start":{"line":5,"column":14},"end":{"line":5,"column":81}},"type":"binary-expr","locations":[{"start":{"line":5,"column":14},"end":{"line":5,"column":42}},{"start":{"line":5,"column":46},"end":{"line":5,"column":81}}],"line":5},"2":{"loc":{"start":{"line":5,"column":148},"end":{"line":5,"column":265}},"type":"cond-expr","locations":[{"start":{"line":5,"column":244},"end":{"line":5,"column":252}},{"start":{"line":5,"column":255},"end":{"line":5,"column":265}}],"line":5},"3":{"loc":{"start":{"line":5,"column":148},"end":{"line":5,"column":241}},"type":"binary-expr","locations":[{"start":{"line":5,"column":148},"end":{"line":5,"column":151}},{"start":{"line":5,"column":155},"end":{"line":5,"column":183}},{"start":{"line":5,"column":187},"end":{"line":5,"column":213}},{"start":{"line":5,"column":217},"end":{"line":5,"column":241}}],"line":5},"4":{"loc":{"start":{"line":13,"column":4},"end":{"line":15,"column":5}},"type":"if","locations":[{"start":{"line":13,"column":4},"end":{"line":15,"column":5}},{"start":{"line":13,"column":4},"end":{"line":15,"column":5}}],"line":13},"5":{"loc":{"start":{"line":17,"column":4},"end":{"line":31,"column":5}},"type":"if","locations":[{"start":{"line":17,"column":4},"end":{"line":31,"column":5}},{"start":{"line":17,"column":4},"end":{"line":31,"column":5}}],"line":17},"6":{"loc":{"start":{"line":18,"column":6},"end":{"line":20,"column":7}},"type":"if","locations":[{"start":{"line":18,"column":6},"end":{"line":20,"column":7}},{"start":{"line":18,"column":6},"end":{"line":20,"column":7}}],"line":18},"7":{"loc":{"start":{"line":18,"column":10},"end":{"line":18,"column":67}},"type":"binary-expr","locations":[{"start":{"line":18,"column":10},"end":{"line":18,"column":32}},{"start":{"line":18,"column":36},"end":{"line":18,"column":67}}],"line":18},"8":{"loc":{"start":{"line":23,"column":6},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":23,"column":6},"end":{"line":27,"column":7}},{"start":{"line":23,"column":6},"end":{"line":27,"column":7}}],"line":23},"9":{"loc":{"start":{"line":33,"column":4},"end":{"line":35,"column":5}},"type":"if","locations":[{"start":{"line":33,"column":4},"end":{"line":35,"column":5}},{"start":{"line":33,"column":4},"end":{"line":35,"column":5}}],"line":33},"10":{"loc":{"start":{"line":37,"column":4},"end":{"line":67,"column":5}},"type":"if","locations":[{"start":{"line":37,"column":4},"end":{"line":67,"column":5}},{"start":{"line":37,"column":4},"end":{"line":67,"column":5}}],"line":37},"11":{"loc":{"start":{"line":37,"column":9},"end":{"line":37,"column":70}},"type":"cond-expr","locations":[{"start":{"line":37,"column":41},"end":{"line":37,"column":52}},{"start":{"line":37,"column":55},"end":{"line":37,"column":70}}],"line":37},"12":{"loc":{"start":{"line":38,"column":6},"end":{"line":40,"column":7}},"type":"if","locations":[{"start":{"line":38,"column":6},"end":{"line":40,"column":7}},{"start":{"line":38,"column":6},"end":{"line":40,"column":7}}],"line":38},"13":{"loc":{"start":{"line":38,"column":11},"end":{"line":38,"column":72}},"type":"cond-expr","locations":[{"start":{"line":38,"column":43},"end":{"line":38,"column":54}},{"start":{"line":38,"column":57},"end":{"line":38,"column":72}}],"line":38},"14":{"loc":{"start":{"line":44,"column":6},"end":{"line":46,"column":7}},"type":"if","locations":[{"start":{"line":44,"column":6},"end":{"line":46,"column":7}},{"start":{"line":44,"column":6},"end":{"line":46,"column":7}}],"line":44},"15":{"loc":{"start":{"line":44,"column":10},"end":{"line":44,"column":28}},"type":"binary-expr","locations":[{"start":{"line":44,"column":10},"end":{"line":44,"column":17}},{"start":{"line":44,"column":21},"end":{"line":44,"column":28}}],"line":44},"16":{"loc":{"start":{"line":51,"column":6},"end":{"line":53,"column":7}},"type":"if","locations":[{"start":{"line":51,"column":6},"end":{"line":53,"column":7}},{"start":{"line":51,"column":6},"end":{"line":53,"column":7}}],"line":51},"17":{"loc":{"start":{"line":56,"column":28},"end":{"line":56,"column":55}},"type":"cond-expr","locations":[{"start":{"line":56,"column":42},"end":{"line":56,"column":46}},{"start":{"line":56,"column":49},"end":{"line":56,"column":55}}],"line":56},"18":{"loc":{"start":{"line":59,"column":6},"end":{"line":63,"column":7}},"type":"if","locations":[{"start":{"line":59,"column":6},"end":{"line":63,"column":7}},{"start":{"line":59,"column":6},"end":{"line":63,"column":7}}],"line":59},"19":{"loc":{"start":{"line":60,"column":15},"end":{"line":60,"column":106}},"type":"binary-expr","locations":[{"start":{"line":60,"column":15},"end":{"line":60,"column":35}},{"start":{"line":60,"column":39},"end":{"line":60,"column":59}},{"start":{"line":60,"column":63},"end":{"line":60,"column":106}}],"line":60}},"s":{"0":1,"1":1,"2":42,"3":0,"4":1,"5":1,"6":36,"7":60,"8":24,"9":36,"10":8,"11":5,"12":3,"13":5,"14":2,"15":1,"16":28,"17":3,"18":25,"19":17,"20":2,"21":15,"22":15,"23":15,"24":2,"25":13,"26":13,"27":13,"28":2,"29":11,"30":11,"31":18,"32":5,"33":6,"34":8,"35":4},"f":{"0":42,"1":0,"2":36,"3":4,"4":60,"5":5,"6":18},"b":{"0":[1,0],"1":[1,1],"2":[0,0],"3":[0,0,0,0],"4":[24,36],"5":[8,28],"6":[5,3],"7":[8,5],"8":[2,1],"9":[3,25],"10":[17,8],"11":[0,25],"12":[2,15],"13":[0,17],"14":[2,13],"15":[15,14],"16":[2,11],"17":[11,0],"18":[5,6],"19":[18,18,17]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"cc1580100659a7e0897deed866b912e7e0506e2c","contentHash":"1b4195f8b911b2aa49bbdd44126f97cf_10.2.0"},"/Users/erik/oss/lru-memoize/src/memoize.js":{"path":"/Users/erik/oss/lru-memoize/src/memoize.js","statementMap":{"0":{"start":{"line":3,"column":0},"end":{"line":3,"column":26}},"1":{"start":{"line":4,"column":0},"end":{"line":4,"column":26}},"2":{"start":{"line":6,"column":18},"end":{"line":6,"column":41}},"3":{"start":{"line":8,"column":19},"end":{"line":8,"column":54}},"4":{"start":{"line":10,"column":16},"end":{"line":10,"column":37}},"5":{"start":{"line":12,"column":17},"end":{"line":12,"column":50}},"6":{"start":{"line":14,"column":22},"end":{"line":14,"column":49}},"7":{"start":{"line":16,"column":23},"end":{"line":16,"column":62}},"8":{"start":{"line":18,"column":39},"end":{"line":18,"column":93}},"9":{"start":{"line":21,"column":2},"end":{"line":21,"column":102}},"10":{"start":{"line":26,"column":15},"end":{"line":26,"column":94}},"11":{"start":{"line":28,"column":2},"end":{"line":44,"column":4}},"12":{"start":{"line":32,"column":4},"end":{"line":34,"column":5}},"13":{"start":{"line":33,"column":6},"end":{"line":33,"column":19}},"14":{"start":{"line":37,"column":4},"end":{"line":41,"column":5}},"15":{"start":{"line":38,"column":6},"end":{"line":40,"column":7}},"16":{"start":{"line":39,"column":8},"end":{"line":39,"column":21}},"17":{"start":{"line":43,"column":4},"end":{"line":43,"column":16}},"18":{"start":{"line":48,"column":14},"end":{"line":48,"column":15}},"19":{"start":{"line":49,"column":15},"end":{"line":51,"column":3}},"20":{"start":{"line":50,"column":4},"end":{"line":50,"column":29}},"21":{"start":{"line":52,"column":20},"end":{"line":52,"column":25}},"22":{"start":{"line":54,"column":2},"end":{"line":56,"column":3}},"23":{"start":{"line":55,"column":4},"end":{"line":55,"column":35}},"24":{"start":{"line":58,"column":2},"end":{"line":60,"column":3}},"25":{"start":{"line":59,"column":4},"end":{"line":59,"column":27}},"26":{"start":{"line":61,"column":2},"end":{"line":66,"column":3}},"27":{"start":{"line":62,"column":4},"end":{"line":62,"column":28}},"28":{"start":{"line":63,"column":9},"end":{"line":66,"column":3}},"29":{"start":{"line":65,"column":4},"end":{"line":65,"column":19}},"30":{"start":{"line":67,"column":2},"end":{"line":69,"column":3}},"31":{"start":{"line":68,"column":4},"end":{"line":68,"column":28}},"32":{"start":{"line":71,"column":14},"end":{"line":71,"column":69}},"33":{"start":{"line":73,"column":2},"end":{"line":86,"column":4}},"34":{"start":{"line":74,"column":4},"end":{"line":85,"column":6}},"35":{"start":{"line":75,"column":6},"end":{"line":77,"column":7}},"36":{"start":{"line":76,"column":8},"end":{"line":76,"column":39}},"37":{"start":{"line":79,"column":18},"end":{"line":79,"column":33}},"38":{"start":{"line":80,"column":6},"end":{"line":83,"column":7}},"39":{"start":{"line":81,"column":8},"end":{"line":81,"column":35}},"40":{"start":{"line":82,"column":8},"end":{"line":82,"column":31}},"41":{"start":{"line":84,"column":6},"end":{"line":84,"column":19}}},"fnMap":{"0":{"name":"_interopRequireDefault","decl":{"start":{"line":18,"column":9},"end":{"line":18,"column":31}},"loc":{"start":{"line":18,"column":37},"end":{"line":18,"column":95}},"line":18},"1":{"name":"createCache","decl":{"start":{"line":20,"column":9},"end":{"line":20,"column":20}},"loc":{"start":{"line":20,"column":36},"end":{"line":22,"column":1}},"line":20},"2":{"name":"createEqualsFn","decl":{"start":{"line":24,"column":9},"end":{"line":24,"column":23}},"loc":{"start":{"line":24,"column":50},"end":{"line":45,"column":1}},"line":24},"3":{"name":"(anonymous_3)","decl":{"start":{"line":28,"column":9},"end":{"line":28,"column":10}},"loc":{"start":{"line":28,"column":35},"end":{"line":44,"column":3}},"line":28},"4":{"name":"memoize","decl":{"start":{"line":47,"column":9},"end":{"line":47,"column":16}},"loc":{"start":{"line":47,"column":19},"end":{"line":87,"column":1}},"line":47},"5":{"name":"equals","decl":{"start":{"line":49,"column":24},"end":{"line":49,"column":30}},"loc":{"start":{"line":49,"column":47},"end":{"line":51,"column":3}},"line":49},"6":{"name":"(anonymous_6)","decl":{"start":{"line":73,"column":9},"end":{"line":73,"column":10}},"loc":{"start":{"line":73,"column":23},"end":{"line":86,"column":3}},"line":73},"7":{"name":"(anonymous_7)","decl":{"start":{"line":74,"column":11},"end":{"line":74,"column":12}},"loc":{"start":{"line":74,"column":23},"end":{"line":85,"column":5}},"line":74}},"branchMap":{"0":{"loc":{"start":{"line":18,"column":46},"end":{"line":18,"column":92}},"type":"cond-expr","locations":[{"start":{"line":18,"column":70},"end":{"line":18,"column":73}},{"start":{"line":18,"column":76},"end":{"line":18,"column":92}}],"line":18},"1":{"loc":{"start":{"line":18,"column":46},"end":{"line":18,"column":67}},"type":"binary-expr","locations":[{"start":{"line":18,"column":46},"end":{"line":18,"column":49}},{"start":{"line":18,"column":53},"end":{"line":18,"column":67}}],"line":18},"2":{"loc":{"start":{"line":21,"column":9},"end":{"line":21,"column":101}},"type":"cond-expr","locations":[{"start":{"line":21,"column":23},"end":{"line":21,"column":60}},{"start":{"line":21,"column":63},"end":{"line":21,"column":101}}],"line":21},"3":{"loc":{"start":{"line":26,"column":15},"end":{"line":26,"column":94}},"type":"cond-expr","locations":[{"start":{"line":26,"column":29},"end":{"line":26,"column":80}},{"start":{"line":26,"column":83},"end":{"line":26,"column":94}}],"line":26},"4":{"loc":{"start":{"line":32,"column":4},"end":{"line":34,"column":5}},"type":"if","locations":[{"start":{"line":32,"column":4},"end":{"line":34,"column":5}},{"start":{"line":32,"column":4},"end":{"line":34,"column":5}}],"line":32},"5":{"loc":{"start":{"line":38,"column":6},"end":{"line":40,"column":7}},"type":"if","locations":[{"start":{"line":38,"column":6},"end":{"line":40,"column":7}},{"start":{"line":38,"column":6},"end":{"line":40,"column":7}}],"line":38},"6":{"loc":{"start":{"line":58,"column":2},"end":{"line":60,"column":3}},"type":"if","locations":[{"start":{"line":58,"column":2},"end":{"line":60,"column":3}},{"start":{"line":58,"column":2},"end":{"line":60,"column":3}}],"line":58},"7":{"loc":{"start":{"line":61,"column":2},"end":{"line":66,"column":3}},"type":"if","locations":[{"start":{"line":61,"column":2},"end":{"line":66,"column":3}},{"start":{"line":61,"column":2},"end":{"line":66,"column":3}}],"line":61},"8":{"loc":{"start":{"line":63,"column":9},"end":{"line":66,"column":3}},"type":"if","locations":[{"start":{"line":63,"column":9},"end":{"line":66,"column":3}},{"start":{"line":63,"column":9},"end":{"line":66,"column":3}}],"line":63},"9":{"loc":{"start":{"line":67,"column":2},"end":{"line":69,"column":3}},"type":"if","locations":[{"start":{"line":67,"column":2},"end":{"line":69,"column":3}},{"start":{"line":67,"column":2},"end":{"line":69,"column":3}}],"line":67},"10":{"loc":{"start":{"line":80,"column":6},"end":{"line":83,"column":7}},"type":"if","locations":[{"start":{"line":80,"column":6},"end":{"line":83,"column":7}},{"start":{"line":80,"column":6},"end":{"line":83,"column":7}}],"line":80}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":3,"9":7,"10":7,"11":7,"12":19,"13":0,"14":19,"15":33,"16":12,"17":7,"18":7,"19":7,"20":43,"21":7,"22":7,"23":5,"24":7,"25":2,"26":7,"27":0,"28":7,"29":4,"30":7,"31":3,"32":7,"33":7,"34":7,"35":22,"36":66,"37":22,"38":22,"39":15,"40":15,"41":22},"f":{"0":3,"1":7,"2":7,"3":19,"4":7,"5":43,"6":7,"7":22},"b":{"0":[3,0],"1":[3,3],"2":[5,2],"3":[3,4],"4":[0,19],"5":[12,21],"6":[2,5],"7":[0,7],"8":[4,3],"9":[3,4],"10":[15,7]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"105bb6474657cbfe5bc14bb31a0d87b064889791","contentHash":"69d5c222ee847a0edf70c58eb1ee16ab_10.2.0"},"/Users/erik/oss/lru-memoize/src/lruCache.js":{"path":"/Users/erik/oss/lru-memoize/src/lruCache.js","statementMap":{"0":{"start":{"line":3,"column":0},"end":{"line":3,"column":26}},"1":{"start":{"line":4,"column":0},"end":{"line":4,"column":27}},"2":{"start":{"line":6,"column":16},"end":{"line":6,"column":18}},"3":{"start":{"line":9,"column":21},"end":{"line":11,"column":6}},"4":{"start":{"line":10,"column":6},"end":{"line":10,"column":36}},"5":{"start":{"line":14,"column":4},"end":{"line":24,"column":5}},"6":{"start":{"line":15,"column":18},"end":{"line":15,"column":37}},"7":{"start":{"line":18,"column":6},"end":{"line":21,"column":7}},"8":{"start":{"line":19,"column":8},"end":{"line":19,"column":37}},"9":{"start":{"line":20,"column":8},"end":{"line":20,"column":31}},"10":{"start":{"line":23,"column":6},"end":{"line":23,"column":25}},"11":{"start":{"line":27,"column":4},"end":{"line":27,"column":21}},"12":{"start":{"line":31,"column":4},"end":{"line":36,"column":5}},"13":{"start":{"line":32,"column":6},"end":{"line":32,"column":50}},"14":{"start":{"line":33,"column":6},"end":{"line":35,"column":7}},"15":{"start":{"line":34,"column":8},"end":{"line":34,"column":22}},"16":{"start":{"line":39,"column":2},"end":{"line":39,"column":32}}},"fnMap":{"0":{"name":"lruCache","decl":{"start":{"line":5,"column":9},"end":{"line":5,"column":17}},"loc":{"start":{"line":5,"column":33},"end":{"line":40,"column":1}},"line":5},"1":{"name":"get","decl":{"start":{"line":8,"column":11},"end":{"line":8,"column":14}},"loc":{"start":{"line":8,"column":20},"end":{"line":28,"column":3}},"line":8},"2":{"name":"(anonymous_2)","decl":{"start":{"line":9,"column":39},"end":{"line":9,"column":40}},"loc":{"start":{"line":9,"column":56},"end":{"line":11,"column":5}},"line":9},"3":{"name":"put","decl":{"start":{"line":30,"column":11},"end":{"line":30,"column":14}},"loc":{"start":{"line":30,"column":27},"end":{"line":37,"column":3}},"line":30}},"branchMap":{"0":{"loc":{"start":{"line":14,"column":4},"end":{"line":24,"column":5}},"type":"if","locations":[{"start":{"line":14,"column":4},"end":{"line":24,"column":5}},{"start":{"line":14,"column":4},"end":{"line":24,"column":5}}],"line":14},"1":{"loc":{"start":{"line":18,"column":6},"end":{"line":21,"column":7}},"type":"if","locations":[{"start":{"line":18,"column":6},"end":{"line":21,"column":7}},{"start":{"line":18,"column":6},"end":{"line":21,"column":7}}],"line":18},"2":{"loc":{"start":{"line":31,"column":4},"end":{"line":36,"column":5}},"type":"if","locations":[{"start":{"line":31,"column":4},"end":{"line":36,"column":5}},{"start":{"line":31,"column":4},"end":{"line":36,"column":5}}],"line":31},"3":{"loc":{"start":{"line":33,"column":6},"end":{"line":35,"column":7}},"type":"if","locations":[{"start":{"line":33,"column":6},"end":{"line":35,"column":7}},{"start":{"line":33,"column":6},"end":{"line":35,"column":7}}],"line":33}},"s":{"0":1,"1":1,"2":2,"3":11,"4":9,"5":11,"6":3,"7":3,"8":2,"9":2,"10":3,"11":8,"12":4,"13":4,"14":4,"15":0,"16":2},"f":{"0":2,"1":11,"2":9,"3":4},"b":{"0":[3,8],"1":[2,1],"2":[4,0],"3":[0,4]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"80d43b1eef1225b4a7c1ecd6b6f98ec152d9d47d","contentHash":"fe49be0b6362db30f6a029629179960f_10.2.0"},"/Users/erik/oss/lru-memoize/src/singletonCache.js":{"path":"/Users/erik/oss/lru-memoize/src/singletonCache.js","statementMap":{"0":{"start":{"line":3,"column":0},"end":{"line":3,"column":26}},"1":{"start":{"line":4,"column":0},"end":{"line":4,"column":33}},"2":{"start":{"line":6,"column":14},"end":{"line":6,"column":20}},"3":{"start":{"line":7,"column":2},"end":{"line":16,"column":4}},"4":{"start":{"line":9,"column":6},"end":{"line":11,"column":7}},"5":{"start":{"line":10,"column":8},"end":{"line":10,"column":27}},"6":{"start":{"line":14,"column":6},"end":{"line":14,"column":41}}},"fnMap":{"0":{"name":"singletonCache","decl":{"start":{"line":5,"column":9},"end":{"line":5,"column":23}},"loc":{"start":{"line":5,"column":32},"end":{"line":17,"column":1}},"line":5},"1":{"name":"get","decl":{"start":{"line":8,"column":18},"end":{"line":8,"column":21}},"loc":{"start":{"line":8,"column":27},"end":{"line":12,"column":5}},"line":8},"2":{"name":"put","decl":{"start":{"line":13,"column":18},"end":{"line":13,"column":21}},"loc":{"start":{"line":13,"column":34},"end":{"line":15,"column":5}},"line":13}},"branchMap":{"0":{"loc":{"start":{"line":9,"column":6},"end":{"line":11,"column":7}},"type":"if","locations":[{"start":{"line":9,"column":6},"end":{"line":11,"column":7}},{"start":{"line":9,"column":6},"end":{"line":11,"column":7}}],"line":9},"1":{"loc":{"start":{"line":9,"column":10},"end":{"line":9,"column":41}},"type":"binary-expr","locations":[{"start":{"line":9,"column":10},"end":{"line":9,"column":15}},{"start":{"line":9,"column":19},"end":{"line":9,"column":41}}],"line":9}},"s":{"0":1,"1":1,"2":5,"3":5,"4":15,"5":4,"6":11},"f":{"0":5,"1":15,"2":11},"b":{"0":[4,11],"1":[15,10]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"0a2bf2d5eb18e35a0c4da4f802414eaadf3ee691","contentHash":"8319897eb43d7eb06625a0da40d88326_10.2.0"}}
body, html {
margin:0; padding: 0;
height: 100%;
}
body {
font-family: Helvetica Neue, Helvetica, Arial;
font-size: 14px;
color:#333;
}
.small { font-size: 12px; }
*, *:after, *:before {
-webkit-box-sizing:border-box;
-moz-box-sizing:border-box;
box-sizing:border-box;
}
h1 { font-size: 20px; margin: 0;}
h2 { font-size: 14px; }
pre {
font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace;
margin: 0;
padding: 0;
-moz-tab-size: 2;
-o-tab-size: 2;
tab-size: 2;
}
a { color:#0074D9; text-decoration:none; }
a:hover { text-decoration:underline; }
.strong { font-weight: bold; }
.space-top1 { padding: 10px 0 0 0; }
.pad2y { padding: 20px 0; }
.pad1y { padding: 10px 0; }
.pad2x { padding: 0 20px; }
.pad2 { padding: 20px; }
.pad1 { padding: 10px; }
.space-left2 { padding-left:55px; }
.space-right2 { padding-right:20px; }
.center { text-align:center; }
.clearfix { display:block; }
.clearfix:after {
content:'';
display:block;
height:0;
clear:both;
visibility:hidden;
}
.fl { float: left; }
@media only screen and (max-width:640px) {
.col3 { width:100%; max-width:100%; }
.hide-mobile { display:none!important; }
}
.quiet {
color: #7f7f7f;
color: rgba(0,0,0,0.5);
}
.quiet a { opacity: 0.7; }
.fraction {
font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace;
font-size: 10px;
color: #555;
background: #E8E8E8;
padding: 4px 5px;
border-radius: 3px;
vertical-align: middle;
}
div.path a:link, div.path a:visited { color: #333; }
table.coverage {
border-collapse: collapse;
margin: 10px 0 0 0;
padding: 0;
}
table.coverage td {
margin: 0;
padding: 0;
vertical-align: top;
}
table.coverage td.line-count {
text-align: right;
padding: 0 5px 0 20px;
}
table.coverage td.line-coverage {
text-align: right;
padding-right: 10px;
min-width:20px;
}
table.coverage td span.cline-any {
display: inline-block;
padding: 0 5px;
width: 100%;
}
.missing-if-branch {
display: inline-block;
margin-right: 5px;
border-radius: 3px;
position: relative;
padding: 0 4px;
background: #333;
color: yellow;
}
.skip-if-branch {
display: none;
margin-right: 10px;
position: relative;
padding: 0 4px;
background: #ccc;
color: white;
}
.missing-if-branch .typ, .skip-if-branch .typ {
color: inherit !important;
}
.coverage-summary {
border-collapse: collapse;
width: 100%;
}
.coverage-summary tr { border-bottom: 1px solid #bbb; }
.keyline-all { border: 1px solid #ddd; }
.coverage-summary td, .coverage-summary th { padding: 10px; }
.coverage-summary tbody { border: 1px solid #bbb; }
.coverage-summary td { border-right: 1px solid #bbb; }
.coverage-summary td:last-child { border-right: none; }
.coverage-summary th {
text-align: left;
font-weight: normal;
white-space: nowrap;
}
.coverage-summary th.file { border-right: none !important; }
.coverage-summary th.pct { }
.coverage-summary th.pic,
.coverage-summary th.abs,
.coverage-summary td.pct,
.coverage-summary td.abs { text-align: right; }
.coverage-summary td.file { white-space: nowrap; }
.coverage-summary td.pic { min-width: 120px !important; }
.coverage-summary tfoot td { }
.coverage-summary .sorter {
height: 10px;
width: 7px;
display: inline-block;
margin-left: 0.5em;
background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent;
}
.coverage-summary .sorted .sorter {
background-position: 0 -20px;
}
.coverage-summary .sorted-desc .sorter {
background-position: 0 -10px;
}
.status-line { height: 10px; }
/* dark red */
.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 }
.low .chart { border:1px solid #C21F39 }
/* medium red */
.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE }
/* light red */
.low, .cline-no { background:#FCE1E5 }
/* light green */
.high, .cline-yes { background:rgb(230,245,208) }
/* medium green */
.cstat-yes { background:rgb(161,215,106) }
/* dark green */
.status-line.high, .high .cover-fill { background:rgb(77,146,33) }
.high .chart { border:1px solid rgb(77,146,33) }
.medium .chart { border:1px solid #666; }
.medium .cover-fill { background: #666; }
.cbranch-no { background: yellow !important; color: #111; }
.cstat-skip { background: #ddd; color: #111; }
.fstat-skip { background: #ddd; color: #111 !important; }
.cbranch-skip { background: #ddd !important; color: #111; }
span.cline-neutral { background: #eaeaea; }
.medium { background: #eaeaea; }
.cover-fill, .cover-empty {
display:inline-block;
height: 12px;
}
.chart {
line-height: 0;
}
.cover-empty {
background: white;
}
.cover-full {
border-right: none !important;
}
pre.prettyprint {
border: none !important;
padding: 0 !important;
margin: 0 !important;
}
.com { color: #999 !important; }
.ignore-none { color: #999; font-weight: normal; }
.wrapper {
min-height: 100%;
height: auto !important;
height: 100%;
margin: 0 auto -48px;
}
.footer, .push {
height: 48px;
}
<!doctype html>
<html lang="en">
<head>
<title>Code coverage report for deepEquals.js</title>
<meta charset="utf-8" />
<link rel="stylesheet" href="prettify.css" />
<link rel="stylesheet" href="base.css" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<style type='text/css'>
.coverage-summary .sorter {
background-image: url(sort-arrow-sprite.png);
}
</style>
</head>
<body>
<div class='wrapper'>
<div class='pad1'>
<h1>
<a href="index.html">All files</a> deepEquals.js
</h1>
<div class='clearfix'>
<div class='fl pad1y space-right2'>
<span class="strong">100% </span>
<span class="quiet">Statements</span>
<span class='fraction'>31/31</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">90.91% </span>
<span class="quiet">Branches</span>
<span class='fraction'>30/33</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">100% </span>
<span class="quiet">Functions</span>
<span class='fraction'>5/5</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">100% </span>
<span class="quiet">Lines</span>
<span class='fraction'>29/29</span>
</div>
</div>
</div>
<div class='status-line high'></div>
<pre><table class="coverage">
<tr><td class="line-count quiet">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68</td><td class="line-coverage quiet"><span class="cline-any cline-yes">36x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">60x</span>
<span class="cline-any cline-yes">24x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">36x</span>
<span class="cline-any cline-yes">8x</span>
<span class="cline-any cline-yes">5x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">5x</span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">28x</span>
<span class="cline-any cline-yes">3x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">25x</span>
<span class="cline-any cline-yes">17x</span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">15x</span>
<span class="cline-any cline-yes">15x</span>
<span class="cline-any cline-yes">15x</span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">13x</span>
<span class="cline-any cline-yes">13x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">13x</span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">11x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">11x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">18x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">5x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">6x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">8x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">4x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const hasOwn = (object, key) =&gt;
Object.prototype.hasOwnProperty.call(object, key)
export default function deepEquals(equals, deepObjects) {
function deep(valueA, valueB) {
if (equals(valueA, valueB)) {
return true
}
&nbsp;
if (Array.isArray(valueA)) {
if (!Array.isArray(valueB) || valueA.length !== valueB.length) {
return false
}
&nbsp;
// Check deep equality of each value in A against the same indexed value in B
if (!valueA.every((value, index) =&gt; deep(value, valueB[index]))) {
return false
}
&nbsp;
// could not find unequal items
return true
}
&nbsp;
if (Array.isArray(valueB)) {
return false
}
&nbsp;
if (<span class="branch-0 cbranch-no" title="branch not covered" >typeof </span>valueA === 'object') {
if (<span class="branch-0 cbranch-no" title="branch not covered" >typeof </span>valueB !== 'object') {
return false
}
&nbsp;
const isANull = valueA === null
const isBNull = valueB === null
if (isANull || isBNull) {
return isANull === isBNull
}
&nbsp;
const aKeys = Object.keys(valueA)
const bKeys = Object.keys(valueB)
&nbsp;
if (aKeys.length !== bKeys.length) {
return false
}
&nbsp;
// Should we compare with shallow equivalence or deep equivalence?
c</span>onst equalityChecker = deepObjects ? deep : <span class="branch-1 cbranch-no" title="branch not covered" >equals
&nbsp;
// Check if objects share same keys, and each of those keys are equal
if (
!aKeys.every(
aKey =&gt;
hasOwn(valueA, aKey) &amp;&amp;
hasOwn(valueB, aKey) &amp;&amp;
equalityChecker(valueA[aKey], valueB[aKey])
)
) {
return false
}
&nbsp;
// could not find unequal keys or values
return true
}
return false
}
&nbsp;
return deep
}
&nbsp;</pre></td></tr>
</table></pre>
<div class='push'></div><!-- for sticky footer -->
</div><!-- /wrapper -->
<div class='footer quiet pad2 space-top1 center small'>
Code coverage
generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Apr 18 2017 10:27:07 GMT+0200 (CEST)
</div>
</div>
<script src="prettify.js"></script>
<script>
window.onload = function () {
if (typeof prettyPrint === 'function') {
prettyPrint();
}
};
</script>
<script src="sorter.js"></script>
</body>
</html>
<!doctype html>
<html lang="en">
<head>
<title>Code coverage report for All files</title>
<meta charset="utf-8" />
<link rel="stylesheet" href="prettify.css" />
<link rel="stylesheet" href="base.css" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<style type='text/css'>
.coverage-summary .sorter {
background-image: url(sort-arrow-sprite.png);
}
</style>
</head>
<body>
<div class='wrapper'>
<div class='pad1'>
<h1>
All files
</h1>
<div class='clearfix'>
<div class='fl pad1y space-right2'>
<span class="strong">96.55% </span>
<span class="quiet">Statements</span>
<span class='fraction'>84/87</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">88.89% </span>
<span class="quiet">Branches</span>
<span class='fraction'>56/63</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">100% </span>
<span class="quiet">Functions</span>
<span class='fraction'>19/19</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">96.2% </span>
<span class="quiet">Lines</span>
<span class='fraction'>76/79</span>
</div>
</div>
</div>
<div class='status-line high'></div>
<div class="pad1">
<table class="coverage-summary">
<thead>
<tr>
<th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
<th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
<th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
<th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
<th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
<th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
<th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
<th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
<th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
<th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
</tr>
</thead>
<tbody><tr>
<td class="file high" data-value="deepEquals.js"><a href="deepEquals.js.html">deepEquals.js</a></td>
<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
<td data-value="100" class="pct high">100%</td>
<td data-value="31" class="abs high">31/31</td>
<td data-value="90.91" class="pct high">90.91%</td>
<td data-value="33" class="abs high">30/33</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="5" class="abs high">5/5</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="29" class="abs high">29/29</td>
</tr>
<tr>
<td class="file high" data-value="lruCache.js"><a href="lruCache.js.html">lruCache.js</a></td>
<td data-value="93.33" class="pic high"><div class="chart"><div class="cover-fill" style="width: 93%;"></div><div class="cover-empty" style="width:7%;"></div></div></td>
<td data-value="93.33" class="pct high">93.33%</td>
<td data-value="15" class="abs high">14/15</td>
<td data-value="75" class="pct medium">75%</td>
<td data-value="8" class="abs medium">6/8</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="4" class="abs high">4/4</td>
<td data-value="92.86" class="pct high">92.86%</td>
<td data-value="14" class="abs high">13/14</td>
</tr>
<tr>
<td class="file high" data-value="memoize.js"><a href="memoize.js.html">memoize.js</a></td>
<td data-value="94.44" class="pic high"><div class="chart"><div class="cover-fill" style="width: 94%;"></div><div class="cover-empty" style="width:6%;"></div></div></td>
<td data-value="94.44" class="pct high">94.44%</td>
<td data-value="36" class="abs high">34/36</td>
<td data-value="88.89" class="pct high">88.89%</td>
<td data-value="18" class="abs high">16/18</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="7" class="abs high">7/7</td>
<td data-value="93.55" class="pct high">93.55%</td>
<td data-value="31" class="abs high">29/31</td>
</tr>
<tr>
<td class="file high" data-value="singletonCache.js"><a href="singletonCache.js.html">singletonCache.js</a></td>
<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
<td data-value="100" class="pct high">100%</td>
<td data-value="5" class="abs high">5/5</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="4" class="abs high">4/4</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="3" class="abs high">3/3</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="5" class="abs high">5/5</td>
</tr>
</tbody>
</table>
</div><div class='push'></div><!-- for sticky footer -->
</div><!-- /wrapper -->
<div class='footer quiet pad2 space-top1 center small'>
Code coverage
generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Apr 18 2017 10:27:07 GMT+0200 (CEST)
</div>
</div>
<script src="prettify.js"></script>
<script>
window.onload = function () {
if (typeof prettyPrint === 'function') {
prettyPrint();
}
};
</script>
<script src="sorter.js"></script>
</body>
</html>
<!doctype html>
<html lang="en">
<head>
<title>Code coverage report for lruCache.js</title>
<meta charset="utf-8" />
<link rel="stylesheet" href="prettify.css" />
<link rel="stylesheet" href="base.css" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<style type='text/css'>
.coverage-summary .sorter {
background-image: url(sort-arrow-sprite.png);
}
</style>
</head>
<body>
<div class='wrapper'>
<div class='pad1'>
<h1>
<a href="index.html">All files</a> lruCache.js
</h1>
<div class='clearfix'>
<div class='fl pad1y space-right2'>
<span class="strong">93.33% </span>
<span class="quiet">Statements</span>
<span class='fraction'>14/15</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">75% </span>
<span class="quiet">Branches</span>
<span class='fraction'>6/8</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">100% </span>
<span class="quiet">Functions</span>
<span class='fraction'>4/4</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">92.86% </span>
<span class="quiet">Lines</span>
<span class='fraction'>13/14</span>
</div>
</div>
</div>
<div class='status-line high'></div>
<pre><table class="coverage">
<tr><td class="line-count quiet">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">11x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">11x</span>
<span class="cline-any cline-yes">3x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">3x</span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">3x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">8x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">4x</span>
<span class="cline-any cline-yes">4x</span>
<span class="cline-any cline-yes">4x</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">export default function lruCache(limit, equals) {
const entries = []
&nbsp;
function get(key) {
const cacheIndex = entries.findIndex(entry =&gt; equals(key, entry.key))
&nbsp;
// We found a cached entry
if (cacheIndex &gt; -1) {
const entry = entries[cacheIndex]
&nbsp;
// Cached entry not at top of cache, move it to the top
if (cacheIndex &gt; 0) {
entries.slice(cacheIndex, 1)
entries.unshift(entry)
}
&nbsp;
return entry.value
}
&nbsp;
// No entry found in cache, return null
return undefined
}
&nbsp;
function put(key, value) {
<span class="missing-if-branch" title="else path not taken" >E</span>if (!get(key)) {
entries.unshift({ key, value })
<span class="missing-if-branch" title="if path not taken" >I</span>if (entries.length &gt; limit) {
<span class="cstat-no" title="statement not covered" > entries.pop()</span>
}
}
}
&nbsp;
return { get, put }
}
&nbsp;</pre></td></tr>
</table></pre>
<div class='push'></div><!-- for sticky footer -->
</div><!-- /wrapper -->
<div class='footer quiet pad2 space-top1 center small'>
Code coverage
generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Apr 18 2017 10:27:07 GMT+0200 (CEST)
</div>
</div>
<script src="prettify.js"></script>
<script>
window.onload = function () {
if (typeof prettyPrint === 'function') {
prettyPrint();
}
};
</script>
<script src="sorter.js"></script>
</body>
</html>
<!doctype html>
<html lang="en">
<head>
<title>Code coverage report for memoize.js</title>
<meta charset="utf-8" />
<link rel="stylesheet" href="prettify.css" />
<link rel="stylesheet" href="base.css" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<style type='text/css'>
.coverage-summary .sorter {
background-image: url(sort-arrow-sprite.png);
}
</style>
</head>
<body>
<div class='wrapper'>
<div class='pad1'>
<h1>
<a href="index.html">All files</a> memoize.js
</h1>
<div class='clearfix'>
<div class='fl pad1y space-right2'>
<span class="strong">94.44% </span>
<span class="quiet">Statements</span>
<span class='fraction'>34/36</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">88.89% </span>
<span class="quiet">Branches</span>
<span class='fraction'>16/18</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">100% </span>
<span class="quiet">Functions</span>
<span class='fraction'>7/7</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">93.55% </span>
<span class="quiet">Lines</span>
<span class='fraction'>29/31</span>
</div>
</div>
</div>
<div class='status-line high'></div>
<pre><table class="coverage">
<tr><td class="line-count quiet">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">7x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">7x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">7x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">19x</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">19x</span>
<span class="cline-any cline-yes">33x</span>
<span class="cline-any cline-yes">12x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">7x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">7x</span>
<span class="cline-any cline-yes">7x</span>
<span class="cline-any cline-yes">43x</span>
<span class="cline-any cline-yes">7x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">7x</span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">7x</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-yes">7x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">4x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">7x</span>
<span class="cline-any cline-yes">3x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">7x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">66x</span>
<span class="cline-any cline-yes">22x</span>
<span class="cline-any cline-yes">22x</span>
<span class="cline-any cline-yes">15x</span>
<span class="cline-any cline-yes">15x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">22x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import deepEquals from './deepEquals'
import lruCache from './lruCache'
import singletonCache from './singletonCache'
&nbsp;
function createCache(limit, equals) {
return limit === 1 ? singletonCache(equals) : lruCache(limit, equals)
}
&nbsp;
function createEqualsFn(basicEquals, deepObjects) {
// Choose strategy for basic or deep object equals
const equals = deepObjects
? deepEquals(basicEquals, deepObjects)
: basicEquals
&nbsp;
return (valueA, valueB) =&gt; {
// The arguments are always the argument array-like objects
&nbsp;
// Different lengths means they are not the same
<span class="missing-if-branch" title="if path not taken" >I</span>if (valueA.length !== valueB.length) {
<span class="cstat-no" title="statement not covered" > return false</span>
}
&nbsp;
// Compare the values
for (let index = 0; index &lt; valueA.length; index += 1) {
if (!equals(valueA[index], valueB[index])) {
return false
}
}
// Found no conflicts
return true
}
}
&nbsp;
export default function memoize(...config) {
let limit = 1
let equals = (valueA, valueB) =&gt; valueA === valueB
let deepObjects = false
&nbsp;
if (typeof config[0] === 'number') {
limit = config.shift()
}
<span class="missing-if-branch" title="if path not taken" >I</span>if (typeof config[0] === 'function') {
<span class="cstat-no" title="statement not covered" > equals = config.shift()</span>
} else if (typeof config[0] === 'undefined') {
// Support passing undefined equal argument;
config.shift()
}
if (typeof config[0] === 'boolean') {
deepObjects = config[0]
}
&nbsp;
const cache = createCache(limit, createEqualsFn(equals, deepObjects))
&nbsp;
return fn =&gt; (...args) =&gt; {
let value = cache.get(args)
if (value === undefined) {
value = fn.apply(fn, args)
cache.put(args, value)
}
return value
}
}
&nbsp;</pre></td></tr>
</table></pre>
<div class='push'></div><!-- for sticky footer -->
</div><!-- /wrapper -->
<div class='footer quiet pad2 space-top1 center small'>
Code coverage
generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Apr 18 2017 10:27:07 GMT+0200 (CEST)
</div>
</div>
<script src="prettify.js"></script>
<script>
window.onload = function () {
if (typeof prettyPrint === 'function') {
prettyPrint();
}
};
</script>
<script src="sorter.js"></script>
</body>
</html>
.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee}
window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V<U;++V){var ae=Z[V];if(ae.ignoreCase){ac=true}else{if(/[a-z]/i.test(ae.source.replace(/\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi,""))){S=true;ac=false;break}}}var Y={b:8,t:9,n:10,v:11,f:12,r:13};function ab(ah){var ag=ah.charCodeAt(0);if(ag!==92){return ag}var af=ah.charAt(1);ag=Y[af];if(ag){return ag}else{if("0"<=af&&af<="7"){return parseInt(ah.substring(1),8)}else{if(af==="u"||af==="x"){return parseInt(ah.substring(2),16)}else{return ah.charCodeAt(1)}}}}function T(af){if(af<32){return(af<16?"\\x0":"\\x")+af.toString(16)}var ag=String.fromCharCode(af);if(ag==="\\"||ag==="-"||ag==="["||ag==="]"){ag="\\"+ag}return ag}function X(am){var aq=am.substring(1,am.length-1).match(new RegExp("\\\\u[0-9A-Fa-f]{4}|\\\\x[0-9A-Fa-f]{2}|\\\\[0-3][0-7]{0,2}|\\\\[0-7]{1,2}|\\\\[\\s\\S]|-|[^-\\\\]","g"));var ak=[];var af=[];var ao=aq[0]==="^";for(var ar=ao?1:0,aj=aq.length;ar<aj;++ar){var ah=aq[ar];if(/\\[bdsw]/i.test(ah)){ak.push(ah)}else{var ag=ab(ah);var al;if(ar+2<aj&&"-"===aq[ar+1]){al=ab(aq[ar+2]);ar+=2}else{al=ag}af.push([ag,al]);if(!(al<65||ag>122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;ar<af.length;++ar){var at=af[ar];if(at[0]<=ap[1]+1){ap[1]=Math.max(ap[1],at[1])}else{ai.push(ap=at)}}var an=["["];if(ao){an.push("^")}an.push.apply(an,ak);for(var ar=0;ar<ai.length;++ar){var at=ai[ar];an.push(T(at[0]));if(at[1]>at[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak<ah;++ak){var ag=aj[ak];if(ag==="("){++am}else{if("\\"===ag.charAt(0)){var af=+ag.substring(1);if(af&&af<=am){an[af]=-1}}}}for(var ak=1;ak<an.length;++ak){if(-1===an[ak]){an[ak]=++ad}}for(var ak=0,am=0;ak<ah;++ak){var ag=aj[ak];if(ag==="("){++am;if(an[am]===undefined){aj[ak]="(?:"}}else{if("\\"===ag.charAt(0)){var af=+ag.substring(1);if(af&&af<=am){aj[ak]="\\"+an[am]}}}}for(var ak=0,am=0;ak<ah;++ak){if("^"===aj[ak]&&"^"!==aj[ak+1]){aj[ak]=""}}if(al.ignoreCase&&S){for(var ak=0;ak<ah;++ak){var ag=aj[ak];var ai=ag.charAt(0);if(ag.length>=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V<U;++V){var ae=Z[V];if(ae.global||ae.multiline){throw new Error(""+ae)}aa.push("(?:"+W(ae)+")")}return new RegExp(aa.join("|"),ac?"gi":"g")}function a(V){var U=/(?:^|\s)nocode(?:\s|$)/;var X=[];var T=0;var Z=[];var W=0;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=document.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Y=S&&"pre"===S.substring(0,3);function aa(ab){switch(ab.nodeType){case 1:if(U.test(ab.className)){return}for(var ae=ab.firstChild;ae;ae=ae.nextSibling){aa(ae)}var ad=ab.nodeName;if("BR"===ad||"LI"===ad){X[W]="\n";Z[W<<1]=T++;Z[(W++<<1)|1]=ab}break;case 3:case 4:var ac=ab.nodeValue;if(ac.length){if(!Y){ac=ac.replace(/[ \t\r\n]+/g," ")}else{ac=ac.replace(/\r\n?/g,"\n")}X[W]=ac;Z[W<<1]=T;T+=ac.length;Z[(W++<<1)|1]=ab}break}}aa(V);return{sourceCode:X.join("").replace(/\n$/,""),spans:Z}}function B(S,U,W,T){if(!U){return}var V={sourceCode:U,basePos:S};W(V);T.push.apply(T,V.decorations)}var v=/\S/;function o(S){var V=undefined;for(var U=S.firstChild;U;U=U.nextSibling){var T=U.nodeType;V=(T===1)?(V?S:U):(T===3)?(v.test(U.nodeValue)?S:V):V}return V===S?undefined:V}function g(U,T){var S={};var V;(function(){var ad=U.concat(T);var ah=[];var ag={};for(var ab=0,Z=ad.length;ab<Z;++ab){var Y=ad[ab];var ac=Y[3];if(ac){for(var ae=ac.length;--ae>=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae<aq;++ae){var ag=an[ae];var ap=aj[ag];var ai=void 0;var am;if(typeof ap==="string"){am=false}else{var aa=S[ag.charAt(0)];if(aa){ai=ag.match(aa[1]);ap=aa[0]}else{for(var ao=0;ao<X;++ao){aa=T[ao];ai=ag.match(aa[1]);if(ai){ap=aa[0];break}}if(!ai){ap=F}}am=ap.length>=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y<W.length;++Y){ae(W[Y])}if(ag===(ag|0)){W[0].setAttribute("value",ag)}var aa=ac.createElement("OL");aa.className="linenums";var X=Math.max(0,((ag-1))|0)||0;for(var Y=0,T=W.length;Y<T;++Y){af=W[Y];af.className="L"+((Y+X)%10);if(!af.firstChild){af.appendChild(ac.createTextNode("\xA0"))}aa.appendChild(af)}V.appendChild(aa)}function D(ac){var aj=/\bMSIE\b/.test(navigator.userAgent);var am=/\n/g;var al=ac.sourceCode;var an=al.length;var V=0;var aa=ac.spans;var T=aa.length;var ah=0;var X=ac.decorations;var Y=X.length;var Z=0;X[Y]=an;var ar,aq;for(aq=ar=0;aq<Y;){if(X[aq]!==X[aq+2]){X[ar++]=X[aq++];X[ar++]=X[aq++]}else{aq+=2}}Y=ar;for(aq=ar=0;aq<Y;){var at=X[aq];var ab=X[aq+1];var W=aq+2;while(W+2<=Y&&X[W+1]===ab){W+=2}X[ar++]=at;X[ar++]=ab;aq=W}Y=X.length=ar;var ae=null;while(ah<T){var af=aa[ah];var S=aa[ah+2]||an;var ag=X[Z];var ap=X[Z+2]||an;var W=Math.min(S,ap);var ak=aa[ah+1];var U;if(ak.nodeType!==1&&(U=al.substring(V,W))){if(aj){U=U.replace(am,"\r")}ak.nodeValue=U;var ai=ak.ownerDocument;var ao=ai.createElement("SPAN");ao.className=X[Z+1];var ad=ak.parentNode;ad.replaceChild(ao,ak);ao.appendChild(ak);if(V<S){aa[ah+1]=ak=ai.createTextNode(al.substring(W,S));ad.insertBefore(ak,ao.nextSibling)}}V=W;if(V>=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*</.test(S)?"default-markup":"default-code"}return t[T]}c(K,["default-code"]);c(g([],[[F,/^[^<?]+/],[E,/^<!\w[^>]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa<ac.length;++aa){for(var Z=0,V=ac[aa].length;Z<V;++Z){T.push(ac[aa][Z])}}ac=null;var W=Date;if(!W.now){W={now:function(){return +(new Date)}}}var X=0;var S;var ab=/\blang(?:uage)?-([\w.]+)(?!\S)/;var ae=/\bprettyprint\b/;function U(){var ag=(window.PR_SHOULD_USE_CONTINUATION?W.now()+250:Infinity);for(;X<T.length&&W.now()<ag;X++){var aj=T[X];var ai=aj.className;if(ai.indexOf("prettyprint")>=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X<T.length){setTimeout(U,250)}else{if(ad){ad()}}}U()}window.prettyPrintOne=y;window.prettyPrint=b;window.PR={createSimpleLexer:g,registerLangHandler:c,sourceDecorator:i,PR_ATTRIB_NAME:P,PR_ATTRIB_VALUE:n,PR_COMMENT:j,PR_DECLARATION:E,PR_KEYWORD:z,PR_LITERAL:G,PR_NOCODE:N,PR_PLAIN:F,PR_PUNCTUATION:L,PR_SOURCE:J,PR_STRING:C,PR_TAG:m,PR_TYPE:O}})();PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_DECLARATION,/^<!\w[^>]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^<script\b[^>]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:<!--|-->)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]);
<!doctype html>
<html lang="en">
<head>
<title>Code coverage report for singletonCache.js</title>
<meta charset="utf-8" />
<link rel="stylesheet" href="prettify.css" />
<link rel="stylesheet" href="base.css" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<style type='text/css'>
.coverage-summary .sorter {
background-image: url(sort-arrow-sprite.png);
}
</style>
</head>
<body>
<div class='wrapper'>
<div class='pad1'>
<h1>
<a href="index.html">All files</a> singletonCache.js
</h1>
<div class='clearfix'>
<div class='fl pad1y space-right2'>
<span class="strong">100% </span>
<span class="quiet">Statements</span>
<span class='fraction'>5/5</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">100% </span>
<span class="quiet">Branches</span>
<span class='fraction'>4/4</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">100% </span>
<span class="quiet">Functions</span>
<span class='fraction'>3/3</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">100% </span>
<span class="quiet">Lines</span>
<span class='fraction'>5/5</span>
</div>
</div>
</div>
<div class='status-line high'></div>
<pre><table class="coverage">
<tr><td class="line-count quiet">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">5x</span>
<span class="cline-any cline-yes">5x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">15x</span>
<span class="cline-any cline-yes">4x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">11x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">export default function singletonCache(equals) {
let entry
return {
get(key) {
if (entry &amp;&amp; equals(key, entry.key)) {
return entry.value
}
},
&nbsp;
put(key, value) {
entry = { key, value }
}
}
}
&nbsp;</pre></td></tr>
</table></pre>
<div class='push'></div><!-- for sticky footer -->
</div><!-- /wrapper -->
<div class='footer quiet pad2 space-top1 center small'>
Code coverage
generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Apr 18 2017 10:27:07 GMT+0200 (CEST)
</div>
</div>
<script src="prettify.js"></script>
<script>
window.onload = function () {
if (typeof prettyPrint === 'function') {
prettyPrint();
}
};
</script>
<script src="sorter.js"></script>
</body>
</html>

Sorry, the diff of this file is not supported yet

var addSorting = (function () {
"use strict";
var cols,
currentSort = {
index: 0,
desc: false
};
// returns the summary table element
function getTable() { return document.querySelector('.coverage-summary'); }
// returns the thead element of the summary table
function getTableHeader() { return getTable().querySelector('thead tr'); }
// returns the tbody element of the summary table
function getTableBody() { return getTable().querySelector('tbody'); }
// returns the th element for nth column
function getNthColumn(n) { return getTableHeader().querySelectorAll('th')[n]; }
// loads all columns
function loadColumns() {
var colNodes = getTableHeader().querySelectorAll('th'),
colNode,
cols = [],
col,
i;
for (i = 0; i < colNodes.length; i += 1) {
colNode = colNodes[i];
col = {
key: colNode.getAttribute('data-col'),
sortable: !colNode.getAttribute('data-nosort'),
type: colNode.getAttribute('data-type') || 'string'
};
cols.push(col);
if (col.sortable) {
col.defaultDescSort = col.type === 'number';
colNode.innerHTML = colNode.innerHTML + '<span class="sorter"></span>';
}
}
return cols;
}
// attaches a data attribute to every tr element with an object
// of data values keyed by column name
function loadRowData(tableRow) {
var tableCols = tableRow.querySelectorAll('td'),
colNode,
col,
data = {},
i,
val;
for (i = 0; i < tableCols.length; i += 1) {
colNode = tableCols[i];
col = cols[i];
val = colNode.getAttribute('data-value');
if (col.type === 'number') {
val = Number(val);
}
data[col.key] = val;
}
return data;
}
// loads all row data
function loadData() {
var rows = getTableBody().querySelectorAll('tr'),
i;
for (i = 0; i < rows.length; i += 1) {
rows[i].data = loadRowData(rows[i]);
}
}
// sorts the table using the data for the ith column
function sortByIndex(index, desc) {
var key = cols[index].key,
sorter = function (a, b) {
a = a.data[key];
b = b.data[key];
return a < b ? -1 : a > b ? 1 : 0;
},
finalSorter = sorter,
tableBody = document.querySelector('.coverage-summary tbody'),
rowNodes = tableBody.querySelectorAll('tr'),
rows = [],
i;
if (desc) {
finalSorter = function (a, b) {
return -1 * sorter(a, b);
};
}
for (i = 0; i < rowNodes.length; i += 1) {
rows.push(rowNodes[i]);
tableBody.removeChild(rowNodes[i]);
}
rows.sort(finalSorter);
for (i = 0; i < rows.length; i += 1) {
tableBody.appendChild(rows[i]);
}
}
// removes sort indicators for current column being sorted
function removeSortIndicators() {
var col = getNthColumn(currentSort.index),
cls = col.className;
cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, '');
col.className = cls;
}
// adds sort indicators for current column being sorted
function addSortIndicators() {
getNthColumn(currentSort.index).className += currentSort.desc ? ' sorted-desc' : ' sorted';
}
// adds event listeners for all sorter widgets
function enableUI() {
var i,
el,
ithSorter = function ithSorter(i) {
var col = cols[i];
return function () {
var desc = col.defaultDescSort;
if (currentSort.index === i) {
desc = !currentSort.desc;
}
sortByIndex(i, desc);
removeSortIndicators();
currentSort.index = i;
currentSort.desc = desc;
addSortIndicators();
};
};
for (i =0 ; i < cols.length; i += 1) {
if (cols[i].sortable) {
// add the click event handler on the th so users
// dont have to click on those tiny arrows
el = getNthColumn(i).querySelector('.sorter').parentElement;
if (el.addEventListener) {
el.addEventListener('click', ithSorter(i));
} else {
el.attachEvent('onclick', ithSorter(i));
}
}
}
}
// adds sorting functionality to the UI
return function () {
if (!getTable()) {
return;
}
cols = loadColumns();
loadData(cols);
addSortIndicators();
enableUI();
};
})();
window.addEventListener('load', addSorting);

Sorry, the diff of this file is not supported yet

'use strict';
var _expect = require('expect');
var _expect2 = _interopRequireDefault(_expect);
var _deepEquals = require('../deepEquals');
var _deepEquals2 = _interopRequireDefault(_deepEquals);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var tripleEquals = (0, _deepEquals2.default)(function (valueA, valueB) {
return valueA === valueB;
}, true);
describe('deepEquals', function () {
it('should return true if argument fields are equal', function () {
(0, _expect2.default)(tripleEquals(3, 3)).toBe(true);
(0, _expect2.default)(tripleEquals('dog', 'dog')).toBe(true);
(0, _expect2.default)(tripleEquals({ a: 1, b: 2, c: undefined }, { a: 1, b: 2, c: undefined })).toBe(true);
(0, _expect2.default)(tripleEquals({ a: 1, b: 2, c: 3 }, { a: 1, b: 2, c: 3 })).toBe(true);
var obj = {};
(0, _expect2.default)(tripleEquals({ a: 1, b: 2, c: obj }, { a: 1, b: 2, c: obj })).toBe(true);
(0, _expect2.default)(tripleEquals(null, null)).toBe(true);
});
it('should return false if arguments are number and string', function () {
(0, _expect2.default)(tripleEquals(2, '2')).toBe(false);
});
it('should return false if arguments are string and number', function () {
(0, _expect2.default)(tripleEquals('2', 2)).toBe(false);
});
it('should return false if arguments are number and object', function () {
(0, _expect2.default)(tripleEquals(4, {})).toBe(false);
});
it('should return false if arguments are object and number', function () {
(0, _expect2.default)(tripleEquals({}, 4)).toBe(false);
});
it('should return false if arguments are number and array', function () {
(0, _expect2.default)(tripleEquals(4, [])).toBe(false);
});
it('should return false if arguments are array and number', function () {
(0, _expect2.default)(tripleEquals([], 4)).toBe(false);
});
it('should return false if arguments are string and object', function () {
(0, _expect2.default)(tripleEquals('cat', {})).toBe(false);
});
it('should return false if arguments are object and string', function () {
(0, _expect2.default)(tripleEquals({}, 'cat')).toBe(false);
});
it('should return false if arguments are string and array', function () {
(0, _expect2.default)(tripleEquals('cat', ['c', 'a', 't'])).toBe(false);
});
it('should return false if arguments are array and string', function () {
(0, _expect2.default)(tripleEquals(['c', 'a', 't'], 'cat')).toBe(false);
});
it('should return false if arguments are array and object', function () {
(0, _expect2.default)(tripleEquals([], {})).toBe(false);
});
it('should return false if arguments are object and array', function () {
(0, _expect2.default)(tripleEquals({}, [])).toBe(false);
});
it('should return false if arguments are object and null', function () {
(0, _expect2.default)(tripleEquals({ a: 1 }, null)).toBe(false);
});
it('should return false if arguments are null and object', function () {
(0, _expect2.default)(tripleEquals(null, { a: 1 })).toBe(false);
});
it('should return false if first argument has too many keys', function () {
(0, _expect2.default)(tripleEquals({ a: 1, b: 2, c: 3 }, { a: 1, b: 2 })).toBe(false);
});
it('should return false if second argument has too many keys', function () {
(0, _expect2.default)(tripleEquals({ a: 1, b: 2 }, { a: 1, b: 2, c: 3 })).toBe(false);
});
it('should return false if arguments have different keys', function () {
(0, _expect2.default)(tripleEquals({ a: 1, b: 2, c: undefined }, { a: 1, bb: 2, c: undefined })).toBe(false);
});
it('should return false if first array argument has too many items', function () {
(0, _expect2.default)(tripleEquals([1, 2, 3, 4], [1, 2, 3])).toBe(false);
});
it('should return false if second array argument has too many items', function () {
(0, _expect2.default)(tripleEquals([1, 2, 3], [1, 2, 3, 4])).toBe(false);
});
it('should work with objects inside arrays', function () {
(0, _expect2.default)(tripleEquals([{ val: 4 }, { val: 2 }, { val: 3 }], [{ val: 1 }, { val: 2 }, { val: 3 }])).toBe(false);
});
});
'use strict';
var _expect = require('expect');
var _expect2 = _interopRequireDefault(_expect);
var _memoize = require('../memoize');
var _memoize2 = _interopRequireDefault(_memoize);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
describe('memoize', function () {
describe('basic', function () {
it('single', function () {
var callCount = 0;
var multiply = function multiply(x, y, z) {
callCount += 1;
return x * y * z;
};
multiply = (0, _memoize2.default)()(multiply);
(0, _expect2.default)(multiply(1, 2, 3)).toBe(6);
(0, _expect2.default)(multiply(1, 2, 3)).toBe(6);
(0, _expect2.default)(callCount).toBe(1);
(0, _expect2.default)(multiply(4, 5, 6)).toBe(120);
(0, _expect2.default)(callCount).toBe(2);
(0, _expect2.default)(multiply(1, 2, 3)).toBe(6);
(0, _expect2.default)(callCount).toBe(3);
});
it('multiple', function () {
var callCount = 0;
var multiply = function multiply(x, y, z) {
callCount += 1;
return x * y * z;
};
multiply = (0, _memoize2.default)(2)(multiply);
(0, _expect2.default)(multiply(1, 2, 3)).toBe(6);
(0, _expect2.default)(multiply(1, 2, 3)).toBe(6);
(0, _expect2.default)(callCount).toBe(1);
(0, _expect2.default)(multiply(4, 5, 6)).toBe(120);
(0, _expect2.default)(callCount).toBe(2);
(0, _expect2.default)(multiply(1, 2, 3)).toBe(6);
(0, _expect2.default)(callCount).toBe(2);
(0, _expect2.default)(multiply(4, 5, 6)).toBe(120);
(0, _expect2.default)(callCount).toBe(2);
});
});
describe('shallow', function () {
it('array', function () {
var callCount = 0;
var multiply = function multiply(x, y, z) {
callCount += 1;
return x.concat(y, z).reduce(function (t, n) {
return t * n;
});
};
multiply = (0, _memoize2.default)()(multiply);
var x = [1, 2, 3];
var y = [4, 5, 6];
var z = [7, 8, 9];
var x2 = [1, 2, 3];
(0, _expect2.default)(multiply(x, y, z)).toBe(362880);
(0, _expect2.default)(multiply(x2, y, z)).toBe(362880);
(0, _expect2.default)(callCount).toBe(2);
});
it('object', function () {
var callCount = 0;
var multiply = function multiply(x, y, z) {
callCount += 1;
return x.val * y.val * z.val;
};
multiply = (0, _memoize2.default)(2)(multiply);
var x = { val: 1 };
var y = { val: 2 };
var z = { val: 3 };
var x2 = { val: 1 };
(0, _expect2.default)(multiply(x, y, z)).toBe(6);
(0, _expect2.default)(multiply(x2, y, z)).toBe(6);
(0, _expect2.default)(callCount).toBe(2);
});
});
describe('deep', function () {
it('array', function () {
var callCount = 0;
var multiply = function multiply(x, y, z) {
callCount += 1;
return x.concat(y, z).reduce(function (t, n) {
return t * n;
});
};
multiply = (0, _memoize2.default)(true)(multiply);
var x = [1, 2, 3];
var y = [4, 5, 6];
var z = [7, 8, 9];
var x2 = [1, 2, 3];
var x3 = [3, 2, 1];
(0, _expect2.default)(multiply(x, y, z)).toBe(362880);
(0, _expect2.default)(multiply(x2, y, z)).toBe(362880);
(0, _expect2.default)(callCount).toBe(1);
(0, _expect2.default)(multiply(x3, y, z)).toBe(362880);
(0, _expect2.default)(callCount).toBe(2);
});
it('object', function () {
var callCount = 0;
var multiply = function multiply(x, y, z) {
callCount += 1;
return x.val * y.val * z.val;
};
multiply = (0, _memoize2.default)(true)(multiply);
var x = { val: 1 };
var y = { val: 2 };
var z = { val: 3 };
var x2 = { val: 1 };
var x3 = { val: 4 };
(0, _expect2.default)(multiply(x, y, z)).toBe(6);
(0, _expect2.default)(multiply(x2, y, z)).toBe(6);
(0, _expect2.default)(callCount).toBe(1);
(0, _expect2.default)(multiply(x3, y, z)).toBe(24);
(0, _expect2.default)(callCount).toBe(2);
});
it('object nested', function () {
var callCount = 0;
var multiply = function multiply(x, y, z) {
callCount += 1;
return x.inner.val * y.inner.val * z.inner.val;
};
multiply = (0, _memoize2.default)(true)(multiply);
var x = { inner: { val: 1 } };
var y = { inner: { val: 2 } };
var z = { inner: { val: 3 } };
var x2 = { inner: { val: 1 } };
var x3 = { inner: { val: 4 } };
(0, _expect2.default)(multiply(x, y, z)).toBe(6);
(0, _expect2.default)(multiply(x2, y, z)).toBe(6);
(0, _expect2.default)(callCount).toBe(1);
(0, _expect2.default)(multiply(x3, y, z)).toBe(24);
(0, _expect2.default)(callCount).toBe(2);
});
});
});
+3
-2
{
"stage": 0,
"loose": "all"
"presets": [
["es2015", { "loose": true }]
]
}
+1
-10
{
"extends": "eslint-config-airbnb",
"env": {
"browser": true,
"mocha": true,
"node": true
},
"rules": {
"comma-dangle": 0, // not sure why airbnb turned this on. gross!
"indent": [2, 2, {"SwitchCase": 1}]
}
"extends": "react-app"
}

@@ -6,13 +6,3 @@ <?xml version="1.0" encoding="UTF-8"?>

</component>
<component name="ProjectLevelVcsManager" settingsEditedManually="false">
<OptionsSetting value="true" id="Add" />
<OptionsSetting value="true" id="Remove" />
<OptionsSetting value="true" id="Checkout" />
<OptionsSetting value="true" id="Update" />
<OptionsSetting value="true" id="Status" />
<OptionsSetting value="true" id="Edit" />
<ConfirmationsSetting value="0" id="Add" />
<ConfirmationsSetting value="0" id="Remove" />
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_6" default="false" assert-keyword="true" jdk-15="true" project-jdk-name="1.7" project-jdk-type="JavaSDK" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_6" default="false" project-jdk-name="1.7" project-jdk-type="JavaSDK" />
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="2d4f98e9-f77d-4fea-8316-8d1f6752a2a2" name="Default" comment="" />
<list default="true" id="2d4f98e9-f77d-4fea-8316-8d1f6752a2a2" name="Default" comment="">
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/package.json" afterPath="$PROJECT_DIR$/package.json" />
</list>
<ignored path="lru-memoize.iws" />

@@ -15,3 +17,2 @@ <ignored path=".idea/workspace.xml" />

</component>
<component name="ChangesViewManager" flattened_view="true" show_ignored="false" />
<component name="CreatePatchCommitExecutor">

@@ -29,5 +30,7 @@ <option name="PATCH_PATH" value="" />

<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="11" column="4" selection-start-line="11" selection-start-column="4" selection-end-line="11" selection-end-column="4" />
<folding />
<state relative-caret-position="126">
<caret line="7" column="0" lean-forward="false" selection-start-line="7" selection-start-column="0" selection-end-line="7" selection-end-column="0" />
<folding>
<marker date="1492504619000" expanded="true" signature="47:237" ph="{...}" />
</folding>
</state>

@@ -37,7 +40,7 @@ </provider>

</file>
<file leaf-file-name="package.json" pinned="false" current-in-tab="false">
<file leaf-file-name="package.json" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/package.json">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="-23.125">
<caret line="37" column="15" selection-start-line="37" selection-start-column="15" selection-end-line="37" selection-end-column="15" />
<state relative-caret-position="36">
<caret line="2" column="18" lean-forward="false" selection-start-line="2" selection-start-column="18" selection-end-line="2" selection-end-column="18" />
<folding />

@@ -48,7 +51,7 @@ </state>

</file>
<file leaf-file-name="memoize.js" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/src/memoize.js">
<file leaf-file-name="LICENSE" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/LICENSE">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.18050541">
<caret line="10" column="2" selection-start-line="10" selection-start-column="2" selection-end-line="10" selection-end-column="2" />
<state relative-caret-position="54">
<caret line="3" column="0" lean-forward="false" selection-start-line="3" selection-start-column="0" selection-end-line="3" selection-end-column="0" />
<folding />

@@ -62,5 +65,10 @@ </state>

<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="20" column="4" selection-start-line="20" selection-start-column="4" selection-end-line="20" selection-end-column="4" />
<folding />
<state relative-caret-position="72">
<caret line="4" column="0" lean-forward="false" selection-start-line="4" selection-start-column="0" selection-end-line="4" selection-end-column="0" />
<folding>
<marker date="1492504619000" expanded="true" signature="78:174" ph="{...}" />
<marker date="1492504619000" expanded="true" signature="91:170" ph="[...]" />
<marker date="1492504619000" expanded="true" signature="186:243" ph="{&quot;library&quot;: 'LruMemoize'...}" />
<marker date="1492504619000" expanded="true" signature="256:285" ph="{...}" />
</folding>
</state>

@@ -73,4 +81,4 @@ </provider>

<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="15" column="0" selection-start-line="15" selection-start-column="0" selection-end-line="15" selection-end-column="0" />
<state relative-caret-position="252">
<caret line="14" column="0" lean-forward="false" selection-start-line="14" selection-start-column="0" selection-end-line="14" selection-end-column="0" />
<folding />

@@ -81,8 +89,10 @@ </state>

</file>
<file leaf-file-name="index.js" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/index.js">
<file leaf-file-name="memoize.js" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/memoize.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
<state relative-caret-position="522">
<caret line="29" column="14" lean-forward="false" selection-start-line="29" selection-start-column="14" selection-end-line="29" selection-end-column="14" />
<folding>
<marker date="1492504619000" expanded="true" signature="1596:1598" ph="{...}" />
</folding>
</state>

@@ -95,4 +105,4 @@ </provider>

<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="16" column="3" selection-start-line="16" selection-start-column="3" selection-end-line="16" selection-end-column="3" />
<state relative-caret-position="234">
<caret line="13" column="20" lean-forward="false" selection-start-line="13" selection-start-column="20" selection-end-line="13" selection-end-column="20" />
<folding />

@@ -103,10 +113,9 @@ </state>

</file>
<file leaf-file-name=".eslintrc" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/.eslintrc">
<file leaf-file-name="deepEquals.js" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/deepEquals.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="-7.5">
<caret line="12" column="0" selection-start-line="12" selection-start-column="0" selection-end-line="12" selection-end-column="0" />
<state relative-caret-position="684">
<caret line="58" column="0" lean-forward="false" selection-start-line="58" selection-start-column="0" selection-end-line="58" selection-end-column="0" />
<folding>
<marker date="1451729625000" expanded="true" signature="48:110" placeholder="{&quot;browser&quot;: true...}" />
<marker date="1451729625000" expanded="true" signature="123:238" placeholder="{&quot;comma-dangle&quot;: 0...}" />
<marker date="1492504619000" expanded="true" signature="1639:1641" ph="{...}" />
</folding>

@@ -117,28 +126,2 @@ </state>

</file>
<file leaf-file-name="README.md" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/README.md">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="-7.413793">
<caret line="24" column="18" selection-start-line="24" selection-start-column="18" selection-end-line="24" selection-end-column="18" />
<folding />
</state>
</provider>
<provider editor-type-id="MarkdownPreviewEditor">
<state />
</provider>
<provider editor-type-id="Gfm">
<state />
</provider>
</entry>
</file>
<file leaf-file-name=".travis.yml" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/.travis.yml">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="9" column="11" selection-start-line="9" selection-start-column="11" selection-end-line="9" selection-end-column="11" />
<folding />
</state>
</provider>
</entry>
</file>
</leaf>

@@ -159,18 +142,23 @@ </component>

<option value="$PROJECT_DIR$/src/lruCache.js" />
<option value="$PROJECT_DIR$/.travis.yml" />
<option value="$PROJECT_DIR$/webpack.config.development.js" />
<option value="$PROJECT_DIR$/webpack.config.production.js" />
<option value="$PROJECT_DIR$/test/memoize.spec.js" />
<option value="$PROJECT_DIR$/.eslintrc" />
<option value="$PROJECT_DIR$/src/memoize.js" />
<option value="$PROJECT_DIR$/src/__tests__/deepEquals.spec.js" />
<option value="$PROJECT_DIR$/src/deepEquals.js" />
<option value="$PROJECT_DIR$/src/singletonCache.js" />
<option value="$PROJECT_DIR$/.travis.yml" />
<option value="$PROJECT_DIR$/src/__tests__/memoize.spec.js" />
<option value="$PROJECT_DIR$/LICENSE" />
<option value="$PROJECT_DIR$/webpack.config.base.js" />
<option value="$PROJECT_DIR$/webpack.config.development.js" />
<option value="$PROJECT_DIR$/webpack.config.production.js" />
<option value="$PROJECT_DIR$/package.json" />
<option value="$PROJECT_DIR$/.eslintrc" />
</list>
</option>
</component>
<component name="JsBuildToolGruntFileManager" detection-done="true" />
<component name="JsBuildToolPackageJson" detection-done="true" />
<component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" />
<component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER" />
<component name="JsGulpfileManager">
<detection-done>true</detection-done>
<sorting>DEFINITION_ORDER</sorting>
</component>

@@ -180,14 +168,4 @@ <component name="ProjectFrameBounds">

<option name="width" value="1280" />
<option name="height" value="977" />
<option name="height" value="1526" />
</component>
<component name="ProjectLevelVcsManager" settingsEditedManually="false">
<OptionsSetting value="true" id="Add" />
<OptionsSetting value="true" id="Remove" />
<OptionsSetting value="true" id="Checkout" />
<OptionsSetting value="true" id="Update" />
<OptionsSetting value="true" id="Status" />
<OptionsSetting value="true" id="Edit" />
<ConfirmationsSetting value="0" id="Add" />
<ConfirmationsSetting value="0" id="Remove" />
</component>
<component name="ProjectView">

@@ -208,2 +186,3 @@ <navigator currentView="ProjectPane" proportions="" version="1">

<panes>
<pane id="PackagesPane" />
<pane id="Scope" />

@@ -217,10 +196,4 @@ <pane id="ProjectPane">

</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="lru-memoize" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="lru-memoize" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />

@@ -239,16 +212,2 @@ </PATH_ELEMENT>

<PATH_ELEMENT>
<option name="myItemId" value="test" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="lru-memoize" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="lru-memoize" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />

@@ -260,3 +219,2 @@ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />

</pane>
<pane id="PackagesPane" />
<pane id="Scratches" />

@@ -271,4 +229,9 @@ </panes>

<property name="js-jscs-nodeInterpreter" value="/usr/local/bin/node" />
<property name="nodejs_interpreter_path" value="/usr/local/bin/node" />
<property name="nodejs.mocha.mocha_node_package_dir" value="$PROJECT_DIR$/node_modules/mocha" />
</component>
<component name="RecentsManager">
<key name="MoveFile.RECENT_KEYS">
<recent name="$PROJECT_DIR$/src" />
</key>
<key name="CopyFile.RECENT_KEYS">

@@ -278,3 +241,15 @@ <recent name="$PROJECT_DIR$" />

</component>
<component name="RunManager">
<component name="RunDashboard">
<option name="ruleStates">
<list>
<RuleState>
<option name="name" value="ConfigurationTypeDashboardGroupingRule" />
</RuleState>
<RuleState>
<option name="name" value="StatusDashboardGroupingRule" />
</RuleState>
</list>
</option>
</component>
<component name="RunManager" selected="Mocha.Mocha">
<configuration default="true" type="Applet" factoryName="Applet">

@@ -363,22 +338,2 @@ <option name="HTML_USED" value="false" />

</configuration>
<configuration default="true" type="JUnitTestDiscovery" factoryName="JUnit Test Discovery" changeList="All">
<module name="" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
<option name="ALTERNATIVE_JRE_PATH" />
<option name="PACKAGE_NAME" />
<option name="MAIN_CLASS_NAME" />
<option name="METHOD_NAME" />
<option name="TEST_OBJECT" value="class" />
<option name="VM_PARAMETERS" />
<option name="PARAMETERS" />
<option name="WORKING_DIRECTORY" />
<option name="ENV_VARIABLES" />
<option name="PASS_PARENT_ENVS" value="true" />
<option name="TEST_SEARCH_SCOPE">
<value defaultName="singleModule" />
</option>
<envs />
<patterns />
<method />
</configuration>
<configuration default="true" type="JarApplication" factoryName="JAR Application">

@@ -403,2 +358,15 @@ <envs />

</configuration>
<configuration default="true" type="JavaScriptTestRunnerJest" factoryName="Jest">
<node-interpreter value="project" />
<working-dir value="" />
<envs />
<scope-kind value="ALL" />
<method />
</configuration>
<configuration default="true" type="JavaScriptTestRunnerProtractor" factoryName="Protractor">
<config-file value="" />
<node-interpreter value="project" />
<envs />
<method />
</configuration>
<configuration default="true" type="JavascriptDebugType" factoryName="JavaScript Debug">

@@ -419,5 +387,16 @@ <method />

</configuration>
<configuration default="true" type="NodeJSConfigurationType" factoryName="Node.js" working-dir="">
<configuration default="true" type="KotlinStandaloneScriptRunConfigurationType" factoryName="Kotlin script">
<option name="filePath" />
<option name="vmParameters" />
<option name="alternativeJrePath" />
<option name="programParameters" />
<option name="passParentEnvs" value="true" />
<option name="workingDirectory" />
<option name="isAlternativeJrePathEnabled" value="false" />
<envs />
<method />
</configuration>
<configuration default="true" type="NodeJSConfigurationType" factoryName="Node.js" path-to-node="project" working-dir="">
<method />
</configuration>
<configuration default="true" type="Remote" factoryName="Remote">

@@ -432,2 +411,3 @@ <option name="USE_SOCKET_TRANSPORT" value="true" />

<configuration default="true" type="js.build_tools.gulp" factoryName="Gulp.js">
<node-interpreter>project</node-interpreter>
<node-options />

@@ -441,4 +421,5 @@ <gulpfile />

<configuration default="true" type="js.build_tools.npm" factoryName="npm">
<command value="run-script" />
<command value="run" />
<scripts />
<node-interpreter value="project" />
<envs />

@@ -448,2 +429,3 @@ <method />

<configuration default="true" type="mocha-javascript-test-runner" factoryName="Mocha">
<node-interpreter />
<node-options />

@@ -460,2 +442,17 @@ <working-directory>$PROJECT_DIR$</working-directory>

</configuration>
<configuration default="false" name="Mocha" type="mocha-javascript-test-runner" factoryName="Mocha">
<node-interpreter>project</node-interpreter>
<node-options />
<working-directory>$PROJECT_DIR$</working-directory>
<pass-parent-env>true</pass-parent-env>
<envs />
<ui>bdd</ui>
<extra-mocha-options>--compilers js:babel-register --recursive</extra-mocha-options>
<test-kind>PATTERN</test-kind>
<test-pattern>./src/**/__tests__/*</test-pattern>
<method />
</configuration>
<list size="1">
<item index="0" class="java.lang.String" itemvalue="Mocha.Mocha" />
</list>
<configuration name="&lt;template&gt;" type="TestNG" default="true" selected="false">

@@ -471,3 +468,5 @@ <option name="MAIN_CLASS_NAME" />

</component>
<component name="ShelveChangesManager" show_recycled="false" />
<component name="ShelveChangesManager" show_recycled="false">
<option name="remove_strategy" value="false" />
</component>
<component name="TaskManager">

@@ -478,2 +477,3 @@ <task active="true" id="Default" summary="Default task">

<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1439804144560</updated>

@@ -484,2 +484,3 @@ </task>

<option name="number" value="00001" />
<option name="presentableId" value="LOCAL-00001" />
<option name="project" value="LOCAL" />

@@ -491,2 +492,3 @@ <updated>1439804341953</updated>

<option name="number" value="00002" />
<option name="presentableId" value="LOCAL-00002" />
<option name="project" value="LOCAL" />

@@ -498,2 +500,3 @@ <updated>1443653582053</updated>

<option name="number" value="00003" />
<option name="presentableId" value="LOCAL-00003" />
<option name="project" value="LOCAL" />

@@ -505,2 +508,3 @@ <updated>1443653887477</updated>

<option name="number" value="00004" />
<option name="presentableId" value="LOCAL-00004" />
<option name="project" value="LOCAL" />

@@ -512,9 +516,38 @@ <updated>1446487948219</updated>

</component>
<component name="TestHistory">
<history-entry file="Mocha - 2017.04.18 at 10h 16m 05s.xml">
<configuration name="Mocha" configurationId="mocha-javascript-test-runner" />
</history-entry>
<history-entry file="Mocha - 2017.04.18 at 10h 17m 28s.xml">
<configuration name="Mocha" configurationId="mocha-javascript-test-runner" />
</history-entry>
<history-entry file="Mocha - 2017.04.18 at 10h 21m 09s.xml">
<configuration name="Mocha" configurationId="mocha-javascript-test-runner" />
</history-entry>
<history-entry file="Mocha - 2017.04.18 at 10h 21m 37s.xml">
<configuration name="Mocha" configurationId="mocha-javascript-test-runner" />
</history-entry>
<history-entry file="Mocha - 2017.04.18 at 10h 22m 09s.xml">
<configuration name="Mocha" configurationId="mocha-javascript-test-runner" />
</history-entry>
<history-entry file="Mocha - 2017.04.18 at 10h 23m 38s.xml">
<configuration name="Mocha" configurationId="mocha-javascript-test-runner" />
</history-entry>
<history-entry file="Mocha - 2017.04.18 at 10h 23m 59s.xml">
<configuration name="Mocha" configurationId="mocha-javascript-test-runner" />
</history-entry>
<history-entry file="Mocha - 2017.04.18 at 10h 24m 56s.xml">
<configuration name="Mocha" configurationId="mocha-javascript-test-runner" />
</history-entry>
<history-entry file="Mocha - 2017.04.18 at 10h 25m 05s.xml">
<configuration name="Mocha" configurationId="mocha-javascript-test-runner" />
</history-entry>
<history-entry file="Mocha - 2017.04.18 at 10h 26m 06s.xml">
<configuration name="Mocha" configurationId="mocha-javascript-test-runner" />
</history-entry>
</component>
<component name="ToolWindowManager">
<frame x="0" y="23" width="1280" height="977" extended-state="0" />
<editor active="false" />
<frame x="0" y="23" width="1280" height="1526" extended-state="0" />
<editor active="true" />
<layout>
<window_info id="GfmBrowser" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Project" active="true" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.24959612" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />

@@ -524,7 +557,12 @@ <window_info id="Palette&#9;" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />

<window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.32954547" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
<window_info id="Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.2536349" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
<window_info id="GfmBrowser" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />

@@ -536,8 +574,10 @@ <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />

<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
</layout>
</component>
<component name="TypeScriptGeneratedFilesManager">
<option name="processedProjectFiles" value="true" />
</component>
<component name="Vcs.Log.UiProperties">

@@ -566,6 +606,6 @@ <option name="RECENTLY_FILTERED_USER_GROUPS">

<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/src/deepEquals.js">
<entry file="file://$PROJECT_DIR$/webpack.config.development.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="11" column="19" selection-start-line="11" selection-start-column="19" selection-end-line="11" selection-end-column="19" />
<state relative-caret-position="252">
<caret line="14" column="0" lean-forward="false" selection-start-line="14" selection-start-column="0" selection-end-line="14" selection-end-column="0" />
<folding />

@@ -575,6 +615,6 @@ </state>

</entry>
<entry file="file://$PROJECT_DIR$/src/singletonCache.js">
<entry file="file://$PROJECT_DIR$/src/index.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="11" column="4" selection-start-line="11" selection-start-column="4" selection-end-line="11" selection-end-column="4" />
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />

@@ -584,6 +624,6 @@ </state>

</entry>
<entry file="file://$PROJECT_DIR$/src/lruCache.js">
<entry file="file://$PROJECT_DIR$/webpack.config.production.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="4" column="17" selection-start-line="4" selection-start-column="17" selection-end-line="4" selection-end-column="17" />
<state relative-caret-position="288">
<caret line="16" column="2" lean-forward="true" selection-start-line="16" selection-start-column="2" selection-end-line="16" selection-end-column="2" />
<folding />

@@ -593,6 +633,50 @@ </state>

</entry>
<entry file="file://$PROJECT_DIR$/.eslintrc">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="216">
<caret line="12" column="0" lean-forward="false" selection-start-line="12" selection-start-column="0" selection-end-line="12" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/README.md">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="432">
<caret line="24" column="18" lean-forward="false" selection-start-line="24" selection-start-column="18" selection-end-line="24" selection-end-column="18" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/.travis.yml">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="162">
<caret line="9" column="11" lean-forward="false" selection-start-line="9" selection-start-column="11" selection-end-line="9" selection-end-column="11" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/memoize.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="10" column="2" selection-start-line="10" selection-start-column="2" selection-end-line="10" selection-end-column="2" />
<state relative-caret-position="144">
<caret line="10" column="2" lean-forward="false" selection-start-line="10" selection-start-column="2" selection-end-line="10" selection-end-column="2" />
<folding>
<marker date="1492504619000" expanded="true" signature="1596:1598" ph="{...}" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/deepEquals.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="11" column="19" lean-forward="false" selection-start-line="11" selection-start-column="19" selection-end-line="11" selection-end-column="19" />
<folding>
<marker date="1492504619000" expanded="true" signature="1639:1641" ph="{...}" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/singletonCache.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="11" column="4" lean-forward="false" selection-start-line="11" selection-start-column="4" selection-end-line="11" selection-end-column="4" />
<folding />

@@ -602,6 +686,26 @@ </state>

</entry>
<entry file="file://$PROJECT_DIR$/src/lruCache.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="4" column="17" lean-forward="false" selection-start-line="4" selection-start-column="17" selection-end-line="4" selection-end-column="17" />
<folding>
<marker date="1492504619000" expanded="true" signature="48:725" ph="{...}" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/memoize.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="10" column="2" lean-forward="false" selection-start-line="10" selection-start-column="2" selection-end-line="10" selection-end-column="2" />
<folding>
<marker date="1492504619000" expanded="true" signature="1596:1598" ph="{...}" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/package.json">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />

@@ -613,5 +717,10 @@ </state>

<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="20" column="4" selection-start-line="20" selection-start-column="4" selection-end-line="20" selection-end-column="4" />
<folding />
<state relative-caret-position="0">
<caret line="20" column="4" lean-forward="false" selection-start-line="20" selection-start-column="4" selection-end-line="20" selection-end-column="4" />
<folding>
<marker date="1492504619000" expanded="true" signature="78:174" ph="{...}" />
<marker date="1492504619000" expanded="true" signature="91:170" ph="[...]" />
<marker date="1492504619000" expanded="true" signature="186:243" ph="{&quot;library&quot;: 'LruMemoize'...}" />
<marker date="1492504619000" expanded="true" signature="256:285" ph="{...}" />
</folding>
</state>

@@ -622,4 +731,4 @@ </provider>

<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="15" column="0" selection-start-line="15" selection-start-column="0" selection-end-line="15" selection-end-column="0" />
<state relative-caret-position="0">
<caret line="15" column="0" lean-forward="false" selection-start-line="15" selection-start-column="0" selection-end-line="15" selection-end-column="0" />
<folding />

@@ -631,4 +740,4 @@ </state>

<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="16" column="3" selection-start-line="16" selection-start-column="3" selection-end-line="16" selection-end-column="3" />
<state relative-caret-position="0">
<caret line="16" column="3" lean-forward="false" selection-start-line="16" selection-start-column="3" selection-end-line="16" selection-end-column="3" />
<folding />

@@ -640,8 +749,5 @@ </state>

<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="3" column="19" selection-start-line="3" selection-start-column="19" selection-end-line="3" selection-end-column="19" />
<folding>
<marker date="1451729625000" expanded="true" signature="48:110" placeholder="{&quot;browser&quot;: true...}" />
<marker date="1451729625000" expanded="true" signature="123:238" placeholder="{&quot;comma-dangle&quot;: 0...}" />
</folding>
<state relative-caret-position="0">
<caret line="3" column="19" lean-forward="false" selection-start-line="3" selection-start-column="19" selection-end-line="3" selection-end-column="19" />
<folding />
</state>

@@ -652,4 +758,4 @@ </provider>

<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="9" column="11" selection-start-line="9" selection-start-column="11" selection-end-line="9" selection-end-column="11" />
<state relative-caret-position="0">
<caret line="9" column="11" lean-forward="false" selection-start-line="9" selection-start-column="11" selection-end-line="9" selection-end-column="11" />
<folding />

@@ -661,5 +767,7 @@ </state>

<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="11" column="19" selection-start-line="11" selection-start-column="19" selection-end-line="11" selection-end-column="19" />
<folding />
<state relative-caret-position="0">
<caret line="11" column="19" lean-forward="false" selection-start-line="11" selection-start-column="19" selection-end-line="11" selection-end-column="19" />
<folding>
<marker date="1492504619000" expanded="true" signature="1639:1641" ph="{...}" />
</folding>
</state>

@@ -670,4 +778,4 @@ </provider>

<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="11" column="4" selection-start-line="11" selection-start-column="4" selection-end-line="11" selection-end-column="4" />
<state relative-caret-position="0">
<caret line="11" column="4" lean-forward="false" selection-start-line="11" selection-start-column="4" selection-end-line="11" selection-end-column="4" />
<folding />

@@ -679,5 +787,7 @@ </state>

<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="4" column="17" selection-start-line="4" selection-start-column="17" selection-end-line="4" selection-end-column="17" />
<folding />
<state relative-caret-position="0">
<caret line="4" column="17" lean-forward="false" selection-start-line="4" selection-start-column="17" selection-end-line="4" selection-end-column="17" />
<folding>
<marker date="1492504619000" expanded="true" signature="48:725" ph="{...}" />
</folding>
</state>

@@ -688,5 +798,7 @@ </provider>

<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="10" column="2" selection-start-line="10" selection-start-column="2" selection-end-line="10" selection-end-column="2" />
<folding />
<state relative-caret-position="0">
<caret line="10" column="2" lean-forward="false" selection-start-line="10" selection-start-column="2" selection-end-line="10" selection-end-column="2" />
<folding>
<marker date="1492504619000" expanded="true" signature="1596:1598" ph="{...}" />
</folding>
</state>

@@ -697,4 +809,4 @@ </provider>

<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="39" column="35" selection-start-line="39" selection-start-column="35" selection-end-line="39" selection-end-column="35" />
<state relative-caret-position="0">
<caret line="39" column="35" lean-forward="false" selection-start-line="39" selection-start-column="35" selection-end-line="39" selection-end-column="35" />
<folding />

@@ -706,5 +818,10 @@ </state>

<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="20" column="4" selection-start-line="20" selection-start-column="4" selection-end-line="20" selection-end-column="4" />
<folding />
<state relative-caret-position="0">
<caret line="20" column="4" lean-forward="false" selection-start-line="20" selection-start-column="4" selection-end-line="20" selection-end-column="4" />
<folding>
<marker date="1492504619000" expanded="true" signature="78:174" ph="{...}" />
<marker date="1492504619000" expanded="true" signature="91:170" ph="[...]" />
<marker date="1492504619000" expanded="true" signature="186:243" ph="{&quot;library&quot;: 'LruMemoize'...}" />
<marker date="1492504619000" expanded="true" signature="256:285" ph="{...}" />
</folding>
</state>

@@ -715,4 +832,4 @@ </provider>

<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="15" column="0" selection-start-line="15" selection-start-column="0" selection-end-line="15" selection-end-column="0" />
<state relative-caret-position="0">
<caret line="15" column="0" lean-forward="false" selection-start-line="15" selection-start-column="0" selection-end-line="15" selection-end-column="0" />
<folding />

@@ -724,4 +841,4 @@ </state>

<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />

@@ -733,8 +850,5 @@ </state>

<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="3" column="19" selection-start-line="3" selection-start-column="19" selection-end-line="3" selection-end-column="19" />
<folding>
<marker date="1451729625000" expanded="true" signature="48:110" placeholder="{&quot;browser&quot;: true...}" />
<marker date="1451729625000" expanded="true" signature="123:238" placeholder="{&quot;comma-dangle&quot;: 0...}" />
</folding>
<state relative-caret-position="0">
<caret line="3" column="19" lean-forward="false" selection-start-line="3" selection-start-column="19" selection-end-line="3" selection-end-column="19" />
<folding />
</state>

@@ -745,4 +859,4 @@ </provider>

<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="9" column="11" selection-start-line="9" selection-start-column="11" selection-end-line="9" selection-end-column="11" />
<state relative-caret-position="0">
<caret line="9" column="11" lean-forward="false" selection-start-line="9" selection-start-column="11" selection-end-line="9" selection-end-column="11" />
<folding />

@@ -752,6 +866,6 @@ </state>

</entry>
<entry file="file://$PROJECT_DIR$/test/deepEquals.spec.js">
<entry file="file://$PROJECT_DIR$/src/__tests__/deepEquals.spec.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="71" column="55" selection-start-line="71" selection-start-column="55" selection-end-line="71" selection-end-column="55" />
<state relative-caret-position="0">
<caret line="71" column="55" lean-forward="false" selection-start-line="71" selection-start-column="55" selection-end-line="71" selection-end-column="55" />
</state>

@@ -762,5 +876,7 @@ </provider>

<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="11" column="19" selection-start-line="11" selection-start-column="19" selection-end-line="11" selection-end-column="19" />
<folding />
<state relative-caret-position="0">
<caret line="11" column="19" lean-forward="false" selection-start-line="11" selection-start-column="19" selection-end-line="11" selection-end-column="19" />
<folding>
<marker date="1492504619000" expanded="true" signature="1639:1641" ph="{...}" />
</folding>
</state>

@@ -771,4 +887,4 @@ </provider>

<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="11" column="4" selection-start-line="11" selection-start-column="4" selection-end-line="11" selection-end-column="4" />
<state relative-caret-position="0">
<caret line="11" column="4" lean-forward="false" selection-start-line="11" selection-start-column="4" selection-end-line="11" selection-end-column="4" />
<folding />

@@ -780,5 +896,7 @@ </state>

<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="4" column="17" selection-start-line="4" selection-start-column="17" selection-end-line="4" selection-end-column="17" />
<folding />
<state relative-caret-position="0">
<caret line="4" column="17" lean-forward="false" selection-start-line="4" selection-start-column="17" selection-end-line="4" selection-end-column="17" />
<folding>
<marker date="1492504619000" expanded="true" signature="48:725" ph="{...}" />
</folding>
</state>

@@ -789,5 +907,7 @@ </provider>

<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="10" column="2" selection-start-line="10" selection-start-column="2" selection-end-line="10" selection-end-column="2" />
<folding />
<state relative-caret-position="0">
<caret line="10" column="2" lean-forward="false" selection-start-line="10" selection-start-column="2" selection-end-line="10" selection-end-column="2" />
<folding>
<marker date="1492504619000" expanded="true" signature="1596:1598" ph="{...}" />
</folding>
</state>

@@ -798,4 +918,4 @@ </provider>

<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="12" column="62" selection-start-line="12" selection-start-column="62" selection-end-line="12" selection-end-column="62" />
<state relative-caret-position="0">
<caret line="12" column="62" lean-forward="false" selection-start-line="12" selection-start-column="62" selection-end-line="12" selection-end-column="62" />
<folding />

@@ -807,29 +927,27 @@ </state>

<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding>
<marker date="1451729625000" expanded="true" signature="48:110" placeholder="{&quot;browser&quot;: true...}" />
<marker date="1451729625000" expanded="true" signature="123:238" placeholder="{&quot;comma-dangle&quot;: 0...}" />
</folding>
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/test/deepEquals.spec.js">
<entry file="file://$PROJECT_DIR$/src/__tests__/deepEquals.spec.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/test/deepEquals.spec.js">
<entry file="file://$PROJECT_DIR$/.travis.yml">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="71" column="55" selection-start-line="71" selection-start-column="55" selection-end-line="71" selection-end-column="55" />
<state relative-caret-position="216">
<caret line="12" column="11" lean-forward="false" selection-start-line="12" selection-start-column="11" selection-end-line="12" selection-end-column="11" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/lruCache.js">
<entry file="file://$PROJECT_DIR$/README.md">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="4" column="17" selection-start-line="4" selection-start-column="17" selection-end-line="4" selection-end-column="17" />
<state relative-caret-position="432">
<caret line="24" column="18" lean-forward="false" selection-start-line="24" selection-start-column="18" selection-end-line="24" selection-end-column="18" />
<folding />

@@ -839,6 +957,6 @@ </state>

</entry>
<entry file="file://$PROJECT_DIR$/src/deepEquals.js">
<entry file="file://$PROJECT_DIR$/.babelrc">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="11" column="19" selection-start-line="11" selection-start-column="19" selection-end-line="11" selection-end-column="19" />
<state relative-caret-position="90">
<caret line="5" column="0" lean-forward="false" selection-start-line="5" selection-start-column="0" selection-end-line="5" selection-end-column="0" />
<folding />

@@ -848,14 +966,16 @@ </state>

</entry>
<entry file="file://$PROJECT_DIR$/src/singletonCache.js">
<entry file="file://$PROJECT_DIR$/src/lruCache.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="11" column="4" selection-start-line="11" selection-start-column="4" selection-end-line="11" selection-end-column="4" />
<folding />
<state relative-caret-position="270">
<caret line="15" column="0" lean-forward="false" selection-start-line="15" selection-start-column="0" selection-end-line="15" selection-end-column="0" />
<folding>
<marker date="1492504619000" expanded="true" signature="48:725" ph="{...}" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/.travis.yml">
<entry file="file://$PROJECT_DIR$/src/index.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="9" column="11" selection-start-line="9" selection-start-column="11" selection-end-line="9" selection-end-column="11" />
<state relative-caret-position="54">
<caret line="3" column="0" lean-forward="false" selection-start-line="3" selection-start-column="0" selection-end-line="3" selection-end-column="0" />
<folding />

@@ -865,6 +985,6 @@ </state>

</entry>
<entry file="file://$PROJECT_DIR$/webpack.config.production.js">
<entry file="file://$PROJECT_DIR$/.eslintrc">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="16" column="3" selection-start-line="16" selection-start-column="3" selection-end-line="16" selection-end-column="3" />
<state relative-caret-position="54">
<caret line="3" column="0" lean-forward="false" selection-start-line="3" selection-start-column="0" selection-end-line="3" selection-end-column="0" />
<folding />

@@ -874,17 +994,18 @@ </state>

</entry>
<entry file="file://$PROJECT_DIR$/package.json">
<entry file="file://$PROJECT_DIR$/src/deepEquals.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="-23.125">
<caret line="37" column="15" selection-start-line="37" selection-start-column="15" selection-end-line="37" selection-end-column="15" />
<folding />
<state relative-caret-position="684">
<caret line="58" column="0" lean-forward="false" selection-start-line="58" selection-start-column="0" selection-end-line="58" selection-end-column="0" />
<folding>
<marker date="1492504619000" expanded="true" signature="1639:1641" ph="{...}" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/.eslintrc">
<entry file="file://$PROJECT_DIR$/src/singletonCache.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="-7.5">
<caret line="12" column="0" selection-start-line="12" selection-start-column="0" selection-end-line="12" selection-end-column="0" />
<state relative-caret-position="126">
<caret line="7" column="0" lean-forward="false" selection-start-line="7" selection-start-column="0" selection-end-line="7" selection-end-column="0" />
<folding>
<marker date="1451729625000" expanded="true" signature="48:110" placeholder="{&quot;browser&quot;: true...}" />
<marker date="1451729625000" expanded="true" signature="123:238" placeholder="{&quot;comma-dangle&quot;: 0...}" />
<marker date="1492504619000" expanded="true" signature="47:237" ph="{...}" />
</folding>

@@ -894,20 +1015,32 @@ </state>

</entry>
<entry file="file://$PROJECT_DIR$/README.md">
<entry file="file://$PROJECT_DIR$/src/__tests__/memoize.spec.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="-7.413793">
<caret line="24" column="18" selection-start-line="24" selection-start-column="18" selection-end-line="24" selection-end-column="18" />
<state relative-caret-position="587">
<caret line="149" column="0" lean-forward="false" selection-start-line="149" selection-start-column="0" selection-end-line="149" selection-end-column="0" />
<folding />
</state>
</provider>
<provider editor-type-id="MarkdownPreviewEditor">
<state />
</entry>
<entry file="file://$PROJECT_DIR$/src/__tests__/deepEquals.spec.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="54">
<caret line="3" column="26" lean-forward="false" selection-start-line="3" selection-start-column="26" selection-end-line="3" selection-end-column="26" />
<folding />
</state>
</provider>
<provider editor-type-id="Gfm">
<state />
</entry>
<entry file="file://$PROJECT_DIR$/src/memoize.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="522">
<caret line="29" column="14" lean-forward="false" selection-start-line="29" selection-start-column="14" selection-end-line="29" selection-end-column="14" />
<folding>
<marker date="1492504619000" expanded="true" signature="1596:1598" ph="{...}" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/webpack.config.base.js">
<entry file="file://$PROJECT_DIR$/LICENSE">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="20" column="4" selection-start-line="20" selection-start-column="4" selection-end-line="20" selection-end-column="4" />
<state relative-caret-position="54">
<caret line="3" column="0" lean-forward="false" selection-start-line="3" selection-start-column="0" selection-end-line="3" selection-end-column="0" />
<folding />

@@ -917,6 +1050,19 @@ </state>

</entry>
<entry file="file://$PROJECT_DIR$/webpack.config.base.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="72">
<caret line="4" column="0" lean-forward="false" selection-start-line="4" selection-start-column="0" selection-end-line="4" selection-end-column="0" />
<folding>
<marker date="1492504619000" expanded="true" signature="78:174" ph="{...}" />
<marker date="1492504619000" expanded="true" signature="91:170" ph="[...]" />
<marker date="1492504619000" expanded="true" signature="186:243" ph="{&quot;library&quot;: 'LruMemoize'...}" />
<marker date="1492504619000" expanded="true" signature="256:285" ph="{...}" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/webpack.config.development.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="15" column="0" selection-start-line="15" selection-start-column="0" selection-end-line="15" selection-end-column="0" />
<state relative-caret-position="252">
<caret line="14" column="0" lean-forward="false" selection-start-line="14" selection-start-column="0" selection-end-line="14" selection-end-column="0" />
<folding />

@@ -926,6 +1072,6 @@ </state>

</entry>
<entry file="file://$PROJECT_DIR$/src/index.js">
<entry file="file://$PROJECT_DIR$/webpack.config.production.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<state relative-caret-position="234">
<caret line="13" column="20" lean-forward="false" selection-start-line="13" selection-start-column="20" selection-end-line="13" selection-end-column="20" />
<folding />

@@ -935,6 +1081,6 @@ </state>

</entry>
<entry file="file://$PROJECT_DIR$/src/memoize.js">
<entry file="file://$PROJECT_DIR$/package.json">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.18050541">
<caret line="10" column="2" selection-start-line="10" selection-start-column="2" selection-end-line="10" selection-end-column="2" />
<state relative-caret-position="36">
<caret line="2" column="18" lean-forward="false" selection-start-line="2" selection-start-column="18" selection-end-line="2" selection-end-column="18" />
<folding />

@@ -941,0 +1087,0 @@ </state>

language: node_js
before_install:
- npm install -g npm@latest
node_js:
- "0.12"
- "4.0"
- "6"
- "5"
- "4"
- "stable"
script:
- npm run lint
- npm test
- npm test
after_success:
- npm run test:cov
- npm run test:codecov

@@ -14,39 +14,65 @@ (function webpackUniversalModuleDefinition(root, factory) {

/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId])
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ exports: {},
/******/ id: moduleId,
/******/ loaded: false
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.loaded = true;
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // identity function for calling harmony imports with the correct context
/******/ __webpack_require__.i = function(value) { return value; };
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, {
/******/ configurable: false,
/******/ enumerable: true,
/******/ get: getter
/******/ });
/******/ }
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(0);
/******/ return __webpack_require__(__webpack_require__.s = 2);
/******/ })

@@ -56,222 +82,259 @@ /************************************************************************/

/* 0 */
/***/ function(module, exports, __webpack_require__) {
/***/ (function(module, exports, __webpack_require__) {
'use strict';
"use strict";
exports.__esModule = true;
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
exports.__esModule = true;
exports.default = memoize;
var _memoize = __webpack_require__(3);
var _deepEquals = __webpack_require__(1);
var _memoize2 = _interopRequireDefault(_memoize);
var _deepEquals2 = _interopRequireDefault(_deepEquals);
exports['default'] = _memoize2['default'];
module.exports = exports['default'];
var _lruCache = __webpack_require__(3);
/***/ },
/* 1 */
/***/ function(module, exports) {
var _lruCache2 = _interopRequireDefault(_lruCache);
'use strict';
var _singletonCache = __webpack_require__(4);
exports.__esModule = true;
exports['default'] = deepEquals;
var hasOwn = Object.prototype.hasOwnProperty;
var _singletonCache2 = _interopRequireDefault(_singletonCache);
function deepEquals(equals, deepObjects) {
function deep(valueA, valueB) {
if (equals(valueA, valueB)) {
return true;
}
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
if (Array.isArray(valueA)) {
if (!Array.isArray(valueB) || valueA.length !== valueB.length) {
return false;
}
for (var index = 0; index < valueA.length; index++) {
if (!deep(valueA[index], valueB[index])) {
return false;
}
}
// could not find unequal items
return true;
}
function createCache(limit, equals) {
return limit === 1 ? (0, _singletonCache2.default)(equals) : (0, _lruCache2.default)(limit, equals);
}
if (Array.isArray(valueB)) {
return false;
}
function createEqualsFn(basicEquals, deepObjects) {
// Choose strategy for basic or deep object equals
var equals = deepObjects ? (0, _deepEquals2.default)(basicEquals, deepObjects) : basicEquals;
if (typeof valueA === 'object') {
if (typeof valueB !== 'object') {
return false;
}
return function (valueA, valueB) {
// The arguments are always the argument array-like objects
var isANull = valueA === null;
var isBNull = valueB === null;
if (isANull || isBNull) {
return isANull === isBNull;
}
// Different lengths means they are not the same
if (valueA.length !== valueB.length) {
return false;
}
var aKeys = Object.keys(valueA);
var bKeys = Object.keys(valueB);
// Compare the values
for (var index = 0; index < valueA.length; index += 1) {
if (!equals(valueA[index], valueB[index])) {
return false;
}
}
// Found no conflicts
return true;
};
}
if (aKeys.length !== bKeys.length) {
return false;
}
function memoize() {
var limit = 1;
var equals = function equals(valueA, valueB) {
return valueA === valueB;
};
var deepObjects = false;
for (var index = 0; index < aKeys.length; index++) {
var key = aKeys[index];
if (hasOwn.call(valueA, key) && (!hasOwn.call(valueB, key) || !(deepObjects ? deep : equals)(valueA[key], valueB[key]))) {
return false;
}
}
// could not find unequal keys or values
return true;
}
return false;
}
for (var _len = arguments.length, config = Array(_len), _key = 0; _key < _len; _key++) {
config[_key] = arguments[_key];
}
return deep;
}
if (typeof config[0] === 'number') {
limit = config.shift();
}
if (typeof config[0] === 'function') {
equals = config.shift();
} else if (typeof config[0] === 'undefined') {
// Support passing undefined equal argument;
config.shift();
}
if (typeof config[0] === 'boolean') {
deepObjects = config[0];
}
module.exports = exports['default'];
var cache = createCache(limit, createEqualsFn(equals, deepObjects));
/***/ },
/* 2 */
/***/ function(module, exports) {
return function (fn) {
return function () {
for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
args[_key2] = arguments[_key2];
}
"use strict";
var value = cache.get(args);
if (value === undefined) {
value = fn.apply(fn, args);
cache.put(args, value);
}
return value;
};
};
}
exports.__esModule = true;
exports["default"] = lruCache;
/***/ }),
/* 1 */
/***/ (function(module, exports, __webpack_require__) {
function lruCache(limit, equals) {
var entries = [];
"use strict";
function get(key) {
for (var index = 0; index < entries.length; index++) {
var entry = entries[index];
if (equals(key, entry.key)) {
if (index > 0) {
// move this entry to the top of the cache
entries.splice(index, 1);
entries.unshift(entry);
}
return entry.value;
}
}
}
function put(key, value) {
if (!get(key)) {
entries.unshift({ key: key, value: value });
if (entries.length > limit) {
entries.pop();
}
}
}
exports.__esModule = true;
return { get: get, put: put };
}
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
module.exports = exports["default"];
exports.default = deepEquals;
var hasOwn = function hasOwn(object, key) {
return Object.prototype.hasOwnProperty.call(object, key);
};
function deepEquals(equals, deepObjects) {
function deep(valueA, valueB) {
if (equals(valueA, valueB)) {
return true;
}
/***/ },
/* 3 */
/***/ function(module, exports, __webpack_require__) {
if (Array.isArray(valueA)) {
if (!Array.isArray(valueB) || valueA.length !== valueB.length) {
return false;
}
'use strict';
// Check deep equality of each value in A against the same indexed value in B
if (!valueA.every(function (value, index) {
return deep(value, valueB[index]);
})) {
return false;
}
exports.__esModule = true;
exports['default'] = memoize;
// could not find unequal items
return true;
}
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
if (Array.isArray(valueB)) {
return false;
}
var _singletonCache = __webpack_require__(4);
if ((typeof valueA === 'undefined' ? 'undefined' : _typeof(valueA)) === 'object') {
if ((typeof valueB === 'undefined' ? 'undefined' : _typeof(valueB)) !== 'object') {
return false;
}
var _singletonCache2 = _interopRequireDefault(_singletonCache);
var isANull = valueA === null;
var isBNull = valueB === null;
if (isANull || isBNull) {
return isANull === isBNull;
}
var _lruCache = __webpack_require__(2);
var aKeys = Object.keys(valueA);
var bKeys = Object.keys(valueB);
var _lruCache2 = _interopRequireDefault(_lruCache);
if (aKeys.length !== bKeys.length) {
return false;
}
var _deepEquals = __webpack_require__(1);
// Should we compare with shallow equivalence or deep equivalence?
var equalityChecker = deepObjects ? deep : equals;
var _deepEquals2 = _interopRequireDefault(_deepEquals);
// Check if objects share same keys, and each of those keys are equal
if (!aKeys.every(function (aKey) {
return hasOwn(valueA, aKey) && hasOwn(valueB, aKey) && equalityChecker(valueA[aKey], valueB[aKey]);
})) {
return false;
}
function createCache(limit, equals) {
return limit === 1 ? _singletonCache2['default'](equals) : _lruCache2['default'](limit, equals);
}
// could not find unequal keys or values
return true;
}
return false;
}
function memoize() {
var limit = 1;
var equals = function equals(valueA, valueB) {
return valueA === valueB;
};
var deepObjects = false;
return deep;
}
for (var _len = arguments.length, config = Array(_len), _key = 0; _key < _len; _key++) {
config[_key] = arguments[_key];
}
/***/ }),
/* 2 */
/***/ (function(module, exports, __webpack_require__) {
if (typeof config[0] === 'number') {
limit = config.shift();
}
if (typeof config[0] === 'function') {
equals = config.shift();
}
if (typeof config[0] === 'boolean') {
deepObjects = config[0];
}
"use strict";
var cache = createCache(limit, _deepEquals2['default'](equals, deepObjects));
return function (fn) {
return function () {
for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
args[_key2] = arguments[_key2];
}
exports.__esModule = true;
var value = cache.get(args);
if (value === undefined) {
value = fn.apply(fn, args);
cache.put(args, value);
}
return value;
};
};
}
var _memoize = __webpack_require__(0);
module.exports = exports['default'];
var _memoize2 = _interopRequireDefault(_memoize);
/***/ },
/* 4 */
/***/ function(module, exports) {
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
"use strict";
exports.default = _memoize2.default;
exports.__esModule = true;
exports["default"] = singletonCache;
/***/ }),
/* 3 */
/***/ (function(module, exports, __webpack_require__) {
function singletonCache(equals) {
var entry = undefined;
return {
get: function get(key) {
if (entry && equals(key, entry.key)) {
return entry.value;
}
},
"use strict";
put: function put(key, value) {
entry = { key: key, value: value };
}
};
}
module.exports = exports["default"];
exports.__esModule = true;
exports.default = lruCache;
function lruCache(limit, equals) {
var entries = [];
/***/ }
/******/ ])
});
;
function get(key) {
var cacheIndex = entries.findIndex(function (entry) {
return equals(key, entry.key);
});
// We found a cached entry
if (cacheIndex > -1) {
var entry = entries[cacheIndex];
// Cached entry not at top of cache, move it to the top
if (cacheIndex > 0) {
entries.slice(cacheIndex, 1);
entries.unshift(entry);
}
return entry.value;
}
// No entry found in cache, return null
return undefined;
}
function put(key, value) {
if (!get(key)) {
entries.unshift({ key: key, value: value });
if (entries.length > limit) {
entries.pop();
}
}
}
return { get: get, put: put };
}
/***/ }),
/* 4 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
exports.__esModule = true;
exports.default = singletonCache;
function singletonCache(equals) {
var entry = void 0;
return {
get: function get(key) {
if (entry && equals(key, entry.key)) {
return entry.value;
}
},
put: function put(key, value) {
entry = { key: key, value: value };
}
};
}
/***/ })
/******/ ]);
});

@@ -1,1 +0,1 @@

!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.LruMemoize=t():e.LruMemoize=t()}(this,function(){return function(e){function t(n){if(r[n])return r[n].exports;var u=r[n]={exports:{},id:n,loaded:!1};return e[n].call(u.exports,u,u.exports,t),u.loaded=!0,u.exports}var r={};return t.m=e,t.c=r,t.p="",t(0)}([function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}t.__esModule=!0;var u=r(3),o=n(u);t.default=o.default,e.exports=t.default},function(e,t){"use strict";function r(e,t){function r(u,o){if(e(u,o))return!0;if(Array.isArray(u)){if(!Array.isArray(o)||u.length!==o.length)return!1;for(var f=0;f<u.length;f++)if(!r(u[f],o[f]))return!1;return!0}if(Array.isArray(o))return!1;if("object"==typeof u){if("object"!=typeof o)return!1;var i=null===u,a=null===o;if(i||a)return i===a;var l=Object.keys(u),s=Object.keys(o);if(l.length!==s.length)return!1;for(var f=0;f<l.length;f++){var c=l[f];if(n.call(u,c)&&(!n.call(o,c)||!(t?r:e)(u[c],o[c])))return!1}return!0}return!1}return r}t.__esModule=!0,t.default=r;var n=Object.prototype.hasOwnProperty;e.exports=t.default},function(e,t){"use strict";function r(e,t){function r(e){for(var r=0;r<u.length;r++){var n=u[r];if(t(e,n.key))return r>0&&(u.splice(r,1),u.unshift(n)),n.value}}function n(t,n){r(t)||(u.unshift({key:t,value:n}),u.length>e&&u.pop())}var u=[];return{get:r,put:n}}t.__esModule=!0,t.default=r,e.exports=t.default},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function u(e,t){return 1===e?i.default(t):l.default(e,t)}function o(){for(var e=1,t=function(e,t){return e===t},r=!1,n=arguments.length,o=Array(n),f=0;n>f;f++)o[f]=arguments[f];"number"==typeof o[0]&&(e=o.shift()),"function"==typeof o[0]&&(t=o.shift()),"boolean"==typeof o[0]&&(r=o[0]);var i=u(e,c.default(t,r));return function(e){return function(){for(var t=arguments.length,r=Array(t),n=0;t>n;n++)r[n]=arguments[n];var u=i.get(r);return void 0===u&&(u=e.apply(e,r),i.put(r,u)),u}}}t.__esModule=!0,t.default=o;var f=r(4),i=n(f),a=r(2),l=n(a),s=r(1),c=n(s);e.exports=t.default},function(e,t){"use strict";function r(e){var t=void 0;return{get:function(r){return t&&e(r,t.key)?t.value:void 0},put:function(e,r){t={key:e,value:r}}}}t.__esModule=!0,t.default=r,e.exports=t.default}])});
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.LruMemoize=e():t.LruMemoize=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var u=n[r]={i:r,l:!1,exports:{}};return t[r].call(u.exports,u,u.exports,e),u.l=!0,u.exports}var n={};return e.m=t,e.c=n,e.i=function(t){return t},e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=2)}([function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function u(t,e){return 1===t?(0,y.default)(e):(0,a.default)(t,e)}function o(t,e){var n=e?(0,c.default)(t,e):t;return function(t,e){if(t.length!==e.length)return!1;for(var r=0;r<t.length;r+=1)if(!n(t[r],e[r]))return!1;return!0}}function f(){for(var t=1,e=function(t,e){return t===e},n=!1,r=arguments.length,f=Array(r),i=0;i<r;i++)f[i]=arguments[i];"number"==typeof f[0]&&(t=f.shift()),"function"==typeof f[0]?e=f.shift():void 0===f[0]&&f.shift(),"boolean"==typeof f[0]&&(n=f[0]);var c=u(t,o(e,n));return function(t){return function(){for(var e=arguments.length,n=Array(e),r=0;r<e;r++)n[r]=arguments[r];var u=c.get(n);return void 0===u&&(u=t.apply(t,n),c.put(n,u)),u}}}e.__esModule=!0,e.default=f;var i=n(1),c=r(i),l=n(3),a=r(l),s=n(4),y=r(s)},function(t,e,n){"use strict";function r(t,e){function n(r,f){if(t(r,f))return!0;if(Array.isArray(r))return!(!Array.isArray(f)||r.length!==f.length)&&!!r.every(function(t,e){return n(t,f[e])});if(Array.isArray(f))return!1;if("object"===(void 0===r?"undefined":u(r))){if("object"!==(void 0===f?"undefined":u(f)))return!1;var i=null===r,c=null===f;if(i||c)return i===c;var l=Object.keys(r),a=Object.keys(f);if(l.length!==a.length)return!1;var s=e?n:t;return!!l.every(function(t){return o(r,t)&&o(f,t)&&s(r[t],f[t])})}return!1}return n}e.__esModule=!0;var u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};e.default=r;var o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)}},function(t,e,n){"use strict";e.__esModule=!0;var r=n(0),u=function(t){return t&&t.__esModule?t:{default:t}}(r);e.default=u.default},function(t,e,n){"use strict";function r(t,e){function n(t){var n=u.findIndex(function(n){return e(t,n.key)});if(n>-1){var r=u[n];return n>0&&(u.slice(n,1),u.unshift(r)),r.value}}function r(e,r){n(e)||(u.unshift({key:e,value:r}),u.length>t&&u.pop())}var u=[];return{get:n,put:r}}e.__esModule=!0,e.default=r},function(t,e,n){"use strict";function r(t){var e=void 0;return{get:function(n){if(e&&t(n,e.key))return e.value},put:function(t,n){e={key:t,value:n}}}}e.__esModule=!0,e.default=r}])});
'use strict';
exports.__esModule = true;
exports['default'] = deepEquals;
var hasOwn = Object.prototype.hasOwnProperty;
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
exports.default = deepEquals;
var hasOwn = function hasOwn(object, key) {
return Object.prototype.hasOwnProperty.call(object, key);
};
function deepEquals(equals, deepObjects) {

@@ -17,7 +21,10 @@ function deep(valueA, valueB) {

}
for (var index = 0; index < valueA.length; index++) {
if (!deep(valueA[index], valueB[index])) {
return false;
}
// Check deep equality of each value in A against the same indexed value in B
if (!valueA.every(function (value, index) {
return deep(value, valueB[index]);
})) {
return false;
}
// could not find unequal items

@@ -31,4 +38,4 @@ return true;

if (typeof valueA === 'object') {
if (typeof valueB !== 'object') {
if ((typeof valueA === 'undefined' ? 'undefined' : _typeof(valueA)) === 'object') {
if ((typeof valueB === 'undefined' ? 'undefined' : _typeof(valueB)) !== 'object') {
return false;

@@ -50,8 +57,12 @@ }

for (var index = 0; index < aKeys.length; index++) {
var key = aKeys[index];
if (hasOwn.call(valueA, key) && (!hasOwn.call(valueB, key) || !(deepObjects ? deep : equals)(valueA[key], valueB[key]))) {
return false;
}
// Should we compare with shallow equivalence or deep equivalence?
var equalityChecker = deepObjects ? deep : equals;
// Check if objects share same keys, and each of those keys are equal
if (!aKeys.every(function (aKey) {
return hasOwn(valueA, aKey) && hasOwn(valueB, aKey) && equalityChecker(valueA[aKey], valueB[aKey]);
})) {
return false;
}
// could not find unequal keys or values

@@ -64,4 +75,2 @@ return true;

return deep;
}
module.exports = exports['default'];
}

@@ -5,4 +5,2 @@ 'use strict';

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var _memoize = require('./memoize');

@@ -12,3 +10,4 @@

exports['default'] = _memoize2['default'];
module.exports = exports['default'];
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.default = _memoize2.default;
"use strict";
exports.__esModule = true;
exports["default"] = lruCache;
exports.default = lruCache;
function lruCache(limit, equals) {

@@ -10,13 +9,21 @@ var entries = [];

function get(key) {
for (var index = 0; index < entries.length; index++) {
var entry = entries[index];
if (equals(key, entry.key)) {
if (index > 0) {
// move this entry to the top of the cache
entries.splice(index, 1);
entries.unshift(entry);
}
return entry.value;
var cacheIndex = entries.findIndex(function (entry) {
return equals(key, entry.key);
});
// We found a cached entry
if (cacheIndex > -1) {
var entry = entries[cacheIndex];
// Cached entry not at top of cache, move it to the top
if (cacheIndex > 0) {
entries.slice(cacheIndex, 1);
entries.unshift(entry);
}
return entry.value;
}
// No entry found in cache, return null
return undefined;
}

@@ -34,4 +41,2 @@

return { get: get, put: put };
}
module.exports = exports["default"];
}
'use strict';
exports.__esModule = true;
exports['default'] = memoize;
exports.default = memoize;
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var _deepEquals = require('./deepEquals');
var _singletonCache = require('./singletonCache');
var _deepEquals2 = _interopRequireDefault(_deepEquals);
var _singletonCache2 = _interopRequireDefault(_singletonCache);
var _lruCache = require('./lruCache');

@@ -16,10 +14,35 @@

var _deepEquals = require('./deepEquals');
var _singletonCache = require('./singletonCache');
var _deepEquals2 = _interopRequireDefault(_deepEquals);
var _singletonCache2 = _interopRequireDefault(_singletonCache);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function createCache(limit, equals) {
return limit === 1 ? _singletonCache2['default'](equals) : _lruCache2['default'](limit, equals);
return limit === 1 ? (0, _singletonCache2.default)(equals) : (0, _lruCache2.default)(limit, equals);
}
function createEqualsFn(basicEquals, deepObjects) {
// Choose strategy for basic or deep object equals
var equals = deepObjects ? (0, _deepEquals2.default)(basicEquals, deepObjects) : basicEquals;
return function (valueA, valueB) {
// The arguments are always the argument array-like objects
// Different lengths means they are not the same
if (valueA.length !== valueB.length) {
return false;
}
// Compare the values
for (var index = 0; index < valueA.length; index += 1) {
if (!equals(valueA[index], valueB[index])) {
return false;
}
}
// Found no conflicts
return true;
};
}
function memoize() {

@@ -41,2 +64,5 @@ var limit = 1;

equals = config.shift();
} else if (typeof config[0] === 'undefined') {
// Support passing undefined equal argument;
config.shift();
}

@@ -47,3 +73,3 @@ if (typeof config[0] === 'boolean') {

var cache = createCache(limit, _deepEquals2['default'](equals, deepObjects));
var cache = createCache(limit, createEqualsFn(equals, deepObjects));

@@ -64,4 +90,2 @@ return function (fn) {

};
}
module.exports = exports['default'];
}
"use strict";
exports.__esModule = true;
exports["default"] = singletonCache;
exports.default = singletonCache;
function singletonCache(equals) {
var entry = undefined;
var entry = void 0;
return {

@@ -14,3 +13,2 @@ get: function get(key) {

},
put: function put(key, value) {

@@ -20,4 +18,2 @@ entry = { key: key, value: value };

};
}
module.exports = exports["default"];
}
The MIT License (MIT)
Copyright (c) 2015 Erik Rasmussen
Copyright (c) 2017 Erik Rasmussen

@@ -5,0 +5,0 @@ Permission is hereby granted, free of charge, to any person obtaining a copy

{
"name": "lru-memoize",
"version": "1.0.1",
"version": "1.0.2",
"description": "A utility to provide lru memoization for any js function",

@@ -18,3 +18,5 @@ "main": "./lib/index.js",

"prepublish": "npm run lint && npm run test && npm run clean && npm run build",
"test": "mocha --compilers js:babel/register --recursive"
"test": "mocha --compilers js:babel-register --recursive \"src/**/__tests__/*\"",
"test:cov": "cross-env NODE_ENV=test nyc --reporter=lcov --reporter=text npm test",
"test:codecov": "cat ./coverage/lcov.info | ./node_modules/codecov.io/bin/codecov.io.js"
},

@@ -35,15 +37,23 @@ "keywords": [

"devDependencies": {
"babel": "^5.8.23",
"babel-core": "^5.8.25",
"babel-eslint": "^4.1.6",
"babel-loader": "^5.3.2",
"eslint": "^1.10.3",
"eslint-config-airbnb": "0.1.0",
"eslint-plugin-react": "^3.13.1",
"expect": "^1.13.4",
"mocha": "^2.3.4",
"rifraf": "^2.0.2",
"rimraf": "^2.5.0",
"webpack": "^1.12.9"
"babel-cli": "^6.24.1",
"babel-core": "^6.24.1",
"babel-eslint": "^7.2.2",
"babel-loader": "^6.4.1",
"babel-preset-es2015": "^6.24.1",
"babel-register": "^6.24.1",
"codecov.io": "^0.1.6",
"cross-env": "^4.0.0",
"eslint": "^3.19.0",
"eslint-config-react-app": "^0.6.2",
"eslint-plugin-flowtype": "^2.30.4",
"eslint-plugin-import": "^2.2.0",
"eslint-plugin-jsx-a11y": "^4.0.0",
"eslint-plugin-react": "^6.10.3",
"expect": "^1.20.2",
"mocha": "^3.2.0",
"nyc": "^10.2.0",
"rifraf": "^2.0.3",
"rimraf": "^2.6.1",
"webpack": "^2.4.1"
}
}

@@ -1,2 +0,2 @@

#lru-memoize
# lru-memoize

@@ -47,17 +47,17 @@ [![NPM Version](https://img.shields.io/npm/v/lru-memoize.svg?style=flat-square)](https://www.npmjs.com/package/lru-memoize)

### `memoize(limit:Integer?, equals:Function?, deepObjects:Boolean?)`
#### `memoize(limit:Integer?, equals:Function?, deepObjects:Boolean?)`
Returns `(Function) => Function`.
##### -`limit` : Integer [optional]
###### -`limit` : Integer [optional]
> The number of `arguments -> value` mappings to keep in memory. Defaults to `1`.
##### -`equals` : Function [optional]
###### -`equals` : Function [optional]
> A function to compare two values for equality. Defaults to `===`.
##### -`deepObjects` : Boolean [optional]
###### -`deepObjects` : Boolean [optional]
> Whether or not to perform a deep equals on Object values. Defaults to `false`.
'use strict';
var webpack = require('webpack');
var reactExternal = {
root: 'React',
commonjs2: 'react',
commonjs: 'react',
amd: 'react'
};
module.exports = {
externals: {
'react': reactExternal
},
module: {
loaders: [
{ test: /\.js$/, loaders: ['babel-loader'], exclude: /node_modules/ }
rules: [
{ test: /\.js$/, use: ['babel-loader'], exclude: /node_modules/ }
]

@@ -25,4 +15,4 @@ },

resolve: {
extensions: ['', '.js']
extensions: ['.js']
}
};

@@ -8,3 +8,2 @@ 'use strict';

config.plugins = [
new webpack.optimize.OccurenceOrderPlugin(),
new webpack.DefinePlugin({

@@ -11,0 +10,0 @@ 'process.env.NODE_ENV': JSON.stringify('development')

@@ -8,3 +8,2 @@ 'use strict';

config.plugins = [
new webpack.optimize.OccurenceOrderPlugin(),
new webpack.DefinePlugin({

@@ -11,0 +10,0 @@ 'process.env.NODE_ENV': JSON.stringify('production')