From 65c1a4a22af190df1852bf6e06aba63e421a958c Mon Sep 17 00:00:00 2001 From: Jason Miller Date: Mon, 4 Dec 2017 12:53:02 -0500 Subject: [PATCH 01/71] Correction: Preact isn't based on Snabbdom --- esm/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/esm/index.js b/esm/index.js index 690e61a..53239b4 100644 --- a/esm/index.js +++ b/esm/index.js @@ -2,7 +2,7 @@ /** * This code is a revisited port of the snabbdom vDOM diffing logic, - * the same that fuels as fork Vue.js, Preact, and other libraries. + * the same that fuels as fork Vue.js, and other libraries. * @credits https://github.com/snabbdom/snabbdom */ From 158e6ce1a601a9f3b1c30e59f4b13c67e0faa295 Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Mon, 4 Dec 2017 15:57:39 -0200 Subject: [PATCH 02/71] removed Preact mention --- cjs/index.js | 2 +- coverage/lcov-report/cjs/index.html | 2 +- coverage/lcov-report/cjs/index.js.html | 4 ++-- coverage/lcov-report/index.html | 2 +- esm/index.js | 2 +- index.js | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/cjs/index.js b/cjs/index.js index ffadf64..fd422f5 100644 --- a/cjs/index.js +++ b/cjs/index.js @@ -3,7 +3,7 @@ /** * This code is a revisited port of the snabbdom vDOM diffing logic, - * the same that fuels as fork Vue.js, Preact, and other libraries. + * the same that fuels as fork Vue.js or other libraries. * @credits https://github.com/snabbdom/snabbdom */ diff --git a/coverage/lcov-report/cjs/index.html b/coverage/lcov-report/cjs/index.html index 389c96b..e455c3e 100644 --- a/coverage/lcov-report/cjs/index.html +++ b/coverage/lcov-report/cjs/index.html @@ -81,7 +81,7 @@

diff --git a/coverage/lcov-report/cjs/index.js.html b/coverage/lcov-report/cjs/index.js.html index bdc474c..84baf27 100644 --- a/coverage/lcov-report/cjs/index.js.html +++ b/coverage/lcov-report/cjs/index.js.html @@ -288,7 +288,7 @@

  /** * This code is a revisited port of the snabbdom vDOM diffing logic, - * the same that fuels as fork Vue.js, Preact, and other libraries. + * the same that fuels as fork Vue.js or other libraries. * @credits https://github.com/snabbdom/snabbdom */   @@ -407,7 +407,7 @@

diff --git a/coverage/lcov-report/index.html b/coverage/lcov-report/index.html index 6d62ef1..b99b3df 100644 --- a/coverage/lcov-report/index.html +++ b/coverage/lcov-report/index.html @@ -81,7 +81,7 @@

diff --git a/esm/index.js b/esm/index.js index 53239b4..82f7df4 100644 --- a/esm/index.js +++ b/esm/index.js @@ -2,7 +2,7 @@ /** * This code is a revisited port of the snabbdom vDOM diffing logic, - * the same that fuels as fork Vue.js, and other libraries. + * the same that fuels as fork Vue.js or other libraries. * @credits https://github.com/snabbdom/snabbdom */ diff --git a/index.js b/index.js index 4654fd6..da05841 100644 --- a/index.js +++ b/index.js @@ -5,7 +5,7 @@ var domdiff = (function (exports) { /** * This code is a revisited port of the snabbdom vDOM diffing logic, - * the same that fuels as fork Vue.js, Preact, and other libraries. + * the same that fuels as fork Vue.js or other libraries. * @credits https://github.com/snabbdom/snabbdom */ From 019e3dfa883f573b96aaed5b4397c2c1f140349c Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Mon, 4 Dec 2017 15:57:42 -0200 Subject: [PATCH 03/71] 0.1.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8e5250c..2ef703f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "domdiff", - "version": "0.1.3", + "version": "0.1.4", "description": "A fast and simple way to diff childNodes", "browser": "min.js", "main": "cjs/index.js", From ccbcdba64646c09bb9c23370b8c4fe0d94b93fcb Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Mon, 4 Dec 2017 17:46:43 -0200 Subject: [PATCH 04/71] removed exports from browser version + clean up --- cjs/index.js | 28 ++++-------- coverage/coverage.json | 2 +- coverage/lcov-report/cjs/index.html | 16 +++---- coverage/lcov-report/cjs/index.js.html | 60 +++++++------------------ coverage/lcov-report/index.html | 16 +++---- coverage/lcov.info | 62 ++++++++++++-------------- esm/index.js | 28 ++++-------- index.js | 23 ++++------ min.js | 4 +- package.json | 2 +- test/test.js | 2 + 11 files changed, 92 insertions(+), 151 deletions(-) diff --git a/cjs/index.js b/cjs/index.js index fd422f5..548a418 100644 --- a/cjs/index.js +++ b/cjs/index.js @@ -73,21 +73,11 @@ const domdiff = ( } else { let el = currentNodes[index]; - // until I am sure the else could never happen - // it might be a vDOM thing 'cause it never happens here - /* istanbul ignore if */ - if (el != futureStartNode) { - parentNode.insertBefore( - get(futureStartNode), - get(currentStartNode) - ); - } else { - currentNodes[index] = null; - parentNode.insertBefore( - get(el), - get(currentStartNode) - ); - } + currentNodes[index] = null; + parentNode.insertBefore( + get(el), + get(currentStartNode) + ); futureStartNode = futureNodes[++futureStart]; } } @@ -97,14 +87,14 @@ const domdiff = ( const place = pin != null ? get(pin) : before; while (futureStart <= futureEnd) { const ch = futureNodes[futureStart++]; - // until I am sure the else could never happen - // it might be a vDOM thing 'cause it never happens here + // ignore until I am sure the else could never happen. + // it might be a vDOM thing 'cause it never happens here. /* istanbul ignore else */ if (ch != null) parentNode.insertBefore(get(ch), place); } } - // until I am sure the else could never happen - // it might be a vDOM thing 'cause it never happens here + // ignore until I am sure the else could never happen. + // it might be a vDOM thing 'cause it never happens here. /* istanbul ignore else */ else if (futureStart > futureEnd) { while (currentStart <= currentEnd) { diff --git a/coverage/coverage.json b/coverage/coverage.json index 3e7e2d9..8f0b6aa 100644 --- a/coverage/coverage.json +++ b/coverage/coverage.json @@ -1 +1 @@ -{"/home/webreflection/code/domdiff/cjs/index.js":{"path":"/home/webreflection/code/domdiff/cjs/index.js","s":{"1":1,"2":569,"3":1,"4":98,"5":98,"6":98,"7":98,"8":98,"9":98,"10":98,"11":98,"12":98,"13":98,"14":447,"15":44,"16":403,"17":11,"18":392,"19":22,"20":370,"21":5,"22":365,"23":140,"24":140,"25":225,"26":50,"27":50,"28":175,"29":52,"30":52,"31":52,"32":123,"33":27,"34":27,"35":27,"36":96,"37":96,"38":52,"39":52,"40":44,"41":44,"42":0,"43":44,"44":44,"45":44,"46":98,"47":52,"48":52,"49":52,"50":63,"51":63,"52":63,"53":46,"54":46,"55":116,"56":116,"57":100,"58":98,"59":1},"b":{"1":[98,96],"2":[50,48],"3":[545,493],"4":[44,403],"5":[11,392],"6":[22,370],"7":[5,365],"8":[140,225],"9":[50,175],"10":[52,123],"11":[52,9],"12":[27,96],"13":[52,44],"14":[0,44],"15":[52,46],"16":[25,27],"17":[63,0],"18":[46,0],"19":[100,16]},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":10,"column":0},"end":{"line":10,"column":24}},"2":{"start":{"line":10,"column":22},"end":{"line":10,"column":23}},"3":{"start":{"line":12,"column":0},"end":{"line":116,"column":2}},"4":{"start":{"line":19,"column":2},"end":{"line":19,"column":34}},"5":{"start":{"line":20,"column":2},"end":{"line":20,"column":61}},"6":{"start":{"line":21,"column":2},"end":{"line":21,"column":40}},"7":{"start":{"line":22,"column":2},"end":{"line":22,"column":43}},"8":{"start":{"line":23,"column":2},"end":{"line":23,"column":41}},"9":{"start":{"line":24,"column":2},"end":{"line":24,"column":48}},"10":{"start":{"line":25,"column":2},"end":{"line":25,"column":41}},"11":{"start":{"line":26,"column":2},"end":{"line":26,"column":39}},"12":{"start":{"line":27,"column":2},"end":{"line":27,"column":45}},"13":{"start":{"line":28,"column":2},"end":{"line":94,"column":3}},"14":{"start":{"line":29,"column":4},"end":{"line":93,"column":5}},"15":{"start":{"line":30,"column":6},"end":{"line":30,"column":54}},"16":{"start":{"line":32,"column":9},"end":{"line":93,"column":5}},"17":{"start":{"line":33,"column":6},"end":{"line":33,"column":50}},"18":{"start":{"line":35,"column":9},"end":{"line":93,"column":5}},"19":{"start":{"line":36,"column":6},"end":{"line":36,"column":51}},"20":{"start":{"line":38,"column":9},"end":{"line":93,"column":5}},"21":{"start":{"line":39,"column":6},"end":{"line":39,"column":47}},"22":{"start":{"line":41,"column":9},"end":{"line":93,"column":5}},"23":{"start":{"line":42,"column":6},"end":{"line":42,"column":54}},"24":{"start":{"line":43,"column":6},"end":{"line":43,"column":51}},"25":{"start":{"line":45,"column":9},"end":{"line":93,"column":5}},"26":{"start":{"line":46,"column":6},"end":{"line":46,"column":50}},"27":{"start":{"line":47,"column":6},"end":{"line":47,"column":47}},"28":{"start":{"line":49,"column":9},"end":{"line":93,"column":5}},"29":{"start":{"line":50,"column":6},"end":{"line":53,"column":8}},"30":{"start":{"line":54,"column":6},"end":{"line":54,"column":54}},"31":{"start":{"line":55,"column":6},"end":{"line":55,"column":47}},"32":{"start":{"line":57,"column":9},"end":{"line":93,"column":5}},"33":{"start":{"line":58,"column":6},"end":{"line":61,"column":8}},"34":{"start":{"line":62,"column":6},"end":{"line":62,"column":50}},"35":{"start":{"line":63,"column":6},"end":{"line":63,"column":51}},"36":{"start":{"line":66,"column":6},"end":{"line":66,"column":56}},"37":{"start":{"line":67,"column":6},"end":{"line":92,"column":7}},"38":{"start":{"line":68,"column":8},"end":{"line":71,"column":10}},"39":{"start":{"line":72,"column":8},"end":{"line":72,"column":53}},"40":{"start":{"line":75,"column":8},"end":{"line":75,"column":37}},"41":{"start":{"line":79,"column":8},"end":{"line":90,"column":9}},"42":{"start":{"line":80,"column":10},"end":{"line":83,"column":12},"skip":true},"43":{"start":{"line":85,"column":10},"end":{"line":85,"column":37}},"44":{"start":{"line":86,"column":10},"end":{"line":89,"column":12}},"45":{"start":{"line":91,"column":8},"end":{"line":91,"column":53}},"46":{"start":{"line":95,"column":2},"end":{"line":114,"column":3}},"47":{"start":{"line":96,"column":4},"end":{"line":96,"column":43}},"48":{"start":{"line":97,"column":4},"end":{"line":97,"column":50}},"49":{"start":{"line":98,"column":4},"end":{"line":104,"column":5}},"50":{"start":{"line":99,"column":6},"end":{"line":99,"column":44}},"51":{"start":{"line":103,"column":6},"end":{"line":103,"column":62}},"52":{"start":{"line":103,"column":22},"end":{"line":103,"column":62}},"53":{"start":{"line":109,"column":7},"end":{"line":114,"column":3}},"54":{"start":{"line":110,"column":4},"end":{"line":113,"column":5}},"55":{"start":{"line":111,"column":6},"end":{"line":111,"column":46}},"56":{"start":{"line":112,"column":6},"end":{"line":112,"column":54}},"57":{"start":{"line":112,"column":22},"end":{"line":112,"column":54}},"58":{"start":{"line":115,"column":2},"end":{"line":115,"column":21}},"59":{"start":{"line":118,"column":0},"end":{"line":118,"column":78}}},"branchMap":{"1":{"line":19,"type":"binary-expr","locations":[{"start":{"line":19,"column":14},"end":{"line":19,"column":21}},{"start":{"line":19,"column":25},"end":{"line":19,"column":33}}]},"2":{"line":20,"type":"cond-expr","locations":[{"start":{"line":20,"column":38},"end":{"line":20,"column":42}},{"start":{"line":20,"column":45},"end":{"line":20,"column":60}}]},"3":{"line":28,"type":"binary-expr","locations":[{"start":{"line":28,"column":9},"end":{"line":28,"column":35}},{"start":{"line":28,"column":39},"end":{"line":28,"column":63}}]},"4":{"line":29,"type":"if","locations":[{"start":{"line":29,"column":4},"end":{"line":29,"column":4}},{"start":{"line":29,"column":4},"end":{"line":29,"column":4}}]},"5":{"line":32,"type":"if","locations":[{"start":{"line":32,"column":9},"end":{"line":32,"column":9}},{"start":{"line":32,"column":9},"end":{"line":32,"column":9}}]},"6":{"line":35,"type":"if","locations":[{"start":{"line":35,"column":9},"end":{"line":35,"column":9}},{"start":{"line":35,"column":9},"end":{"line":35,"column":9}}]},"7":{"line":38,"type":"if","locations":[{"start":{"line":38,"column":9},"end":{"line":38,"column":9}},{"start":{"line":38,"column":9},"end":{"line":38,"column":9}}]},"8":{"line":41,"type":"if","locations":[{"start":{"line":41,"column":9},"end":{"line":41,"column":9}},{"start":{"line":41,"column":9},"end":{"line":41,"column":9}}]},"9":{"line":45,"type":"if","locations":[{"start":{"line":45,"column":9},"end":{"line":45,"column":9}},{"start":{"line":45,"column":9},"end":{"line":45,"column":9}}]},"10":{"line":49,"type":"if","locations":[{"start":{"line":49,"column":9},"end":{"line":49,"column":9}},{"start":{"line":49,"column":9},"end":{"line":49,"column":9}}]},"11":{"line":52,"type":"binary-expr","locations":[{"start":{"line":52,"column":8},"end":{"line":52,"column":39}},{"start":{"line":52,"column":43},"end":{"line":52,"column":49}}]},"12":{"line":57,"type":"if","locations":[{"start":{"line":57,"column":9},"end":{"line":57,"column":9}},{"start":{"line":57,"column":9},"end":{"line":57,"column":9}}]},"13":{"line":67,"type":"if","locations":[{"start":{"line":67,"column":6},"end":{"line":67,"column":6}},{"start":{"line":67,"column":6},"end":{"line":67,"column":6}}]},"14":{"line":79,"type":"if","locations":[{"start":{"line":79,"column":8},"end":{"line":79,"column":8},"skip":true},{"start":{"line":79,"column":8},"end":{"line":79,"column":8}}]},"15":{"line":95,"type":"if","locations":[{"start":{"line":95,"column":2},"end":{"line":95,"column":2}},{"start":{"line":95,"column":2},"end":{"line":95,"column":2}}]},"16":{"line":97,"type":"cond-expr","locations":[{"start":{"line":97,"column":32},"end":{"line":97,"column":40}},{"start":{"line":97,"column":43},"end":{"line":97,"column":49}}]},"17":{"line":103,"type":"if","locations":[{"start":{"line":103,"column":6},"end":{"line":103,"column":6}},{"start":{"line":103,"column":6},"end":{"line":103,"column":6},"skip":true}]},"18":{"line":109,"type":"if","locations":[{"start":{"line":109,"column":7},"end":{"line":109,"column":7}},{"start":{"line":109,"column":7},"end":{"line":109,"column":7},"skip":true}]},"19":{"line":112,"type":"if","locations":[{"start":{"line":112,"column":6},"end":{"line":112,"column":6}},{"start":{"line":112,"column":6},"end":{"line":112,"column":6}}]}}}} \ No newline at end of file +{"/home/webreflection/code/domdiff/cjs/index.js":{"path":"/home/webreflection/code/domdiff/cjs/index.js","s":{"1":1,"2":569,"3":1,"4":98,"5":98,"6":98,"7":98,"8":98,"9":98,"10":98,"11":98,"12":98,"13":98,"14":447,"15":44,"16":403,"17":11,"18":392,"19":22,"20":370,"21":5,"22":365,"23":140,"24":140,"25":225,"26":50,"27":50,"28":175,"29":52,"30":52,"31":52,"32":123,"33":27,"34":27,"35":27,"36":96,"37":96,"38":52,"39":52,"40":44,"41":44,"42":44,"43":44,"44":98,"45":52,"46":52,"47":52,"48":63,"49":63,"50":63,"51":46,"52":46,"53":116,"54":116,"55":100,"56":98,"57":1},"b":{"1":[98,96],"2":[50,48],"3":[545,493],"4":[44,403],"5":[11,392],"6":[22,370],"7":[5,365],"8":[140,225],"9":[50,175],"10":[52,123],"11":[52,9],"12":[27,96],"13":[52,44],"14":[52,46],"15":[25,27],"16":[63,0],"17":[46,0],"18":[100,16]},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":10,"column":0},"end":{"line":10,"column":24}},"2":{"start":{"line":10,"column":22},"end":{"line":10,"column":23}},"3":{"start":{"line":12,"column":0},"end":{"line":106,"column":2}},"4":{"start":{"line":19,"column":2},"end":{"line":19,"column":34}},"5":{"start":{"line":20,"column":2},"end":{"line":20,"column":61}},"6":{"start":{"line":21,"column":2},"end":{"line":21,"column":40}},"7":{"start":{"line":22,"column":2},"end":{"line":22,"column":43}},"8":{"start":{"line":23,"column":2},"end":{"line":23,"column":41}},"9":{"start":{"line":24,"column":2},"end":{"line":24,"column":48}},"10":{"start":{"line":25,"column":2},"end":{"line":25,"column":41}},"11":{"start":{"line":26,"column":2},"end":{"line":26,"column":39}},"12":{"start":{"line":27,"column":2},"end":{"line":27,"column":45}},"13":{"start":{"line":28,"column":2},"end":{"line":84,"column":3}},"14":{"start":{"line":29,"column":4},"end":{"line":83,"column":5}},"15":{"start":{"line":30,"column":6},"end":{"line":30,"column":54}},"16":{"start":{"line":32,"column":9},"end":{"line":83,"column":5}},"17":{"start":{"line":33,"column":6},"end":{"line":33,"column":50}},"18":{"start":{"line":35,"column":9},"end":{"line":83,"column":5}},"19":{"start":{"line":36,"column":6},"end":{"line":36,"column":51}},"20":{"start":{"line":38,"column":9},"end":{"line":83,"column":5}},"21":{"start":{"line":39,"column":6},"end":{"line":39,"column":47}},"22":{"start":{"line":41,"column":9},"end":{"line":83,"column":5}},"23":{"start":{"line":42,"column":6},"end":{"line":42,"column":54}},"24":{"start":{"line":43,"column":6},"end":{"line":43,"column":51}},"25":{"start":{"line":45,"column":9},"end":{"line":83,"column":5}},"26":{"start":{"line":46,"column":6},"end":{"line":46,"column":50}},"27":{"start":{"line":47,"column":6},"end":{"line":47,"column":47}},"28":{"start":{"line":49,"column":9},"end":{"line":83,"column":5}},"29":{"start":{"line":50,"column":6},"end":{"line":53,"column":8}},"30":{"start":{"line":54,"column":6},"end":{"line":54,"column":54}},"31":{"start":{"line":55,"column":6},"end":{"line":55,"column":47}},"32":{"start":{"line":57,"column":9},"end":{"line":83,"column":5}},"33":{"start":{"line":58,"column":6},"end":{"line":61,"column":8}},"34":{"start":{"line":62,"column":6},"end":{"line":62,"column":50}},"35":{"start":{"line":63,"column":6},"end":{"line":63,"column":51}},"36":{"start":{"line":66,"column":6},"end":{"line":66,"column":56}},"37":{"start":{"line":67,"column":6},"end":{"line":82,"column":7}},"38":{"start":{"line":68,"column":8},"end":{"line":71,"column":10}},"39":{"start":{"line":72,"column":8},"end":{"line":72,"column":53}},"40":{"start":{"line":75,"column":8},"end":{"line":75,"column":37}},"41":{"start":{"line":76,"column":8},"end":{"line":76,"column":35}},"42":{"start":{"line":77,"column":8},"end":{"line":80,"column":10}},"43":{"start":{"line":81,"column":8},"end":{"line":81,"column":53}},"44":{"start":{"line":85,"column":2},"end":{"line":104,"column":3}},"45":{"start":{"line":86,"column":4},"end":{"line":86,"column":43}},"46":{"start":{"line":87,"column":4},"end":{"line":87,"column":50}},"47":{"start":{"line":88,"column":4},"end":{"line":94,"column":5}},"48":{"start":{"line":89,"column":6},"end":{"line":89,"column":44}},"49":{"start":{"line":93,"column":6},"end":{"line":93,"column":62}},"50":{"start":{"line":93,"column":22},"end":{"line":93,"column":62}},"51":{"start":{"line":99,"column":7},"end":{"line":104,"column":3}},"52":{"start":{"line":100,"column":4},"end":{"line":103,"column":5}},"53":{"start":{"line":101,"column":6},"end":{"line":101,"column":46}},"54":{"start":{"line":102,"column":6},"end":{"line":102,"column":54}},"55":{"start":{"line":102,"column":22},"end":{"line":102,"column":54}},"56":{"start":{"line":105,"column":2},"end":{"line":105,"column":21}},"57":{"start":{"line":108,"column":0},"end":{"line":108,"column":78}}},"branchMap":{"1":{"line":19,"type":"binary-expr","locations":[{"start":{"line":19,"column":14},"end":{"line":19,"column":21}},{"start":{"line":19,"column":25},"end":{"line":19,"column":33}}]},"2":{"line":20,"type":"cond-expr","locations":[{"start":{"line":20,"column":38},"end":{"line":20,"column":42}},{"start":{"line":20,"column":45},"end":{"line":20,"column":60}}]},"3":{"line":28,"type":"binary-expr","locations":[{"start":{"line":28,"column":9},"end":{"line":28,"column":35}},{"start":{"line":28,"column":39},"end":{"line":28,"column":63}}]},"4":{"line":29,"type":"if","locations":[{"start":{"line":29,"column":4},"end":{"line":29,"column":4}},{"start":{"line":29,"column":4},"end":{"line":29,"column":4}}]},"5":{"line":32,"type":"if","locations":[{"start":{"line":32,"column":9},"end":{"line":32,"column":9}},{"start":{"line":32,"column":9},"end":{"line":32,"column":9}}]},"6":{"line":35,"type":"if","locations":[{"start":{"line":35,"column":9},"end":{"line":35,"column":9}},{"start":{"line":35,"column":9},"end":{"line":35,"column":9}}]},"7":{"line":38,"type":"if","locations":[{"start":{"line":38,"column":9},"end":{"line":38,"column":9}},{"start":{"line":38,"column":9},"end":{"line":38,"column":9}}]},"8":{"line":41,"type":"if","locations":[{"start":{"line":41,"column":9},"end":{"line":41,"column":9}},{"start":{"line":41,"column":9},"end":{"line":41,"column":9}}]},"9":{"line":45,"type":"if","locations":[{"start":{"line":45,"column":9},"end":{"line":45,"column":9}},{"start":{"line":45,"column":9},"end":{"line":45,"column":9}}]},"10":{"line":49,"type":"if","locations":[{"start":{"line":49,"column":9},"end":{"line":49,"column":9}},{"start":{"line":49,"column":9},"end":{"line":49,"column":9}}]},"11":{"line":52,"type":"binary-expr","locations":[{"start":{"line":52,"column":8},"end":{"line":52,"column":39}},{"start":{"line":52,"column":43},"end":{"line":52,"column":49}}]},"12":{"line":57,"type":"if","locations":[{"start":{"line":57,"column":9},"end":{"line":57,"column":9}},{"start":{"line":57,"column":9},"end":{"line":57,"column":9}}]},"13":{"line":67,"type":"if","locations":[{"start":{"line":67,"column":6},"end":{"line":67,"column":6}},{"start":{"line":67,"column":6},"end":{"line":67,"column":6}}]},"14":{"line":85,"type":"if","locations":[{"start":{"line":85,"column":2},"end":{"line":85,"column":2}},{"start":{"line":85,"column":2},"end":{"line":85,"column":2}}]},"15":{"line":87,"type":"cond-expr","locations":[{"start":{"line":87,"column":32},"end":{"line":87,"column":40}},{"start":{"line":87,"column":43},"end":{"line":87,"column":49}}]},"16":{"line":93,"type":"if","locations":[{"start":{"line":93,"column":6},"end":{"line":93,"column":6}},{"start":{"line":93,"column":6},"end":{"line":93,"column":6},"skip":true}]},"17":{"line":99,"type":"if","locations":[{"start":{"line":99,"column":7},"end":{"line":99,"column":7}},{"start":{"line":99,"column":7},"end":{"line":99,"column":7},"skip":true}]},"18":{"line":102,"type":"if","locations":[{"start":{"line":102,"column":6},"end":{"line":102,"column":6}},{"start":{"line":102,"column":6},"end":{"line":102,"column":6}}]}}}} \ No newline at end of file diff --git a/coverage/lcov-report/cjs/index.html b/coverage/lcov-report/cjs/index.html index e455c3e..564fa76 100644 --- a/coverage/lcov-report/cjs/index.html +++ b/coverage/lcov-report/cjs/index.html @@ -22,12 +22,12 @@

100% Statements - 59/59 + 57/57
100% Branches - 38/38 + 36/36
100% @@ -37,10 +37,10 @@

100% Lines - 56/56 + 54/54
- 1 statement, 3 branches + 2 branches Ignored     

@@ -66,13 +66,13 @@

index.js
100% - 59/59 + 57/57 100% - 38/38 + 36/36 100% 0/0 100% - 56/56 + 54/54 @@ -81,7 +81,7 @@

diff --git a/coverage/lcov-report/cjs/index.js.html b/coverage/lcov-report/cjs/index.js.html index 84baf27..5cd1b9d 100644 --- a/coverage/lcov-report/cjs/index.js.html +++ b/coverage/lcov-report/cjs/index.js.html @@ -22,12 +22,12 @@

100% Statements - 59/59 + 57/57
100% Branches - 38/38 + 36/36
100% @@ -37,10 +37,10 @@

100% Lines - 56/56 + 54/54
- 1 statement, 3 branches + 2 branches Ignored     

@@ -155,17 +155,7 @@

106 107 108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119  +109        @@ -240,21 +230,11 @@

    44× -  -  -  -44× - -  -  -  -  44× 44×       -  44×     @@ -358,21 +338,11 @@

} else { let el = currentNodes[index]; - // until I am sure the else could never happen - // it might be a vDOM thing 'cause it never happens here - /* istanbul ignore if */ - Iif (el != futureStartNode) { - parentNode.insertBefore( - get(futureStartNode), - get(currentStartNode) - ); - } else { - currentNodes[index] = null; - parentNode.insertBefore( - get(el), - get(currentStartNode) - ); - } + currentNodes[index] = null; + parentNode.insertBefore( + get(el), + get(currentStartNode) + ); futureStartNode = futureNodes[++futureStart]; } } @@ -382,14 +352,14 @@

const place = pin != null ? get(pin) : before; while (futureStart <= futureEnd) { const ch = futureNodes[futureStart++]; - // until I am sure the else could never happen - // it might be a vDOM thing 'cause it never happens here + // ignore until I am sure the else could never happen. + // it might be a vDOM thing 'cause it never happens here. /* istanbul ignore else */ Eif (ch != null) parentNode.insertBefore(get(ch), place); } } - // until I am sure the else could never happen - // it might be a vDOM thing 'cause it never happens here + // ignore until I am sure the else could never happen. + // it might be a vDOM thing 'cause it never happens here. /* istanbul ignore else */ else Eif (futureStart > futureEnd) { while (currentStart <= currentEnd) { @@ -407,7 +377,7 @@

diff --git a/coverage/lcov-report/index.html b/coverage/lcov-report/index.html index b99b3df..f0972b8 100644 --- a/coverage/lcov-report/index.html +++ b/coverage/lcov-report/index.html @@ -22,12 +22,12 @@

100% Statements - 59/59 + 57/57
100% Branches - 38/38 + 36/36
100% @@ -37,10 +37,10 @@

100% Lines - 56/56 + 54/54
- 1 statement, 3 branches + 2 branches Ignored     

@@ -66,13 +66,13 @@

cjs/
100% - 59/59 + 57/57 100% - 38/38 + 36/36 100% 0/0 100% - 56/56 + 54/54 @@ -81,7 +81,7 @@

diff --git a/coverage/lcov.info b/coverage/lcov.info index 88084a2..37f4467 100644 --- a/coverage/lcov.info +++ b/coverage/lcov.info @@ -41,25 +41,23 @@ DA:67,96 DA:68,52 DA:72,52 DA:75,44 -DA:79,44 -DA:80,1 -DA:85,44 -DA:86,44 -DA:91,44 -DA:95,98 -DA:96,52 -DA:97,52 -DA:98,52 -DA:99,63 -DA:103,63 -DA:109,46 -DA:110,46 -DA:111,116 -DA:112,116 -DA:115,98 -DA:118,1 -LF:56 -LH:56 +DA:76,44 +DA:77,44 +DA:81,44 +DA:85,98 +DA:86,52 +DA:87,52 +DA:88,52 +DA:89,63 +DA:93,63 +DA:99,46 +DA:100,46 +DA:101,116 +DA:102,116 +DA:105,98 +DA:108,1 +LF:54 +LH:54 BRDA:19,1,0,98 BRDA:19,1,1,96 BRDA:20,2,0,50 @@ -86,18 +84,16 @@ BRDA:57,12,0,27 BRDA:57,12,1,96 BRDA:67,13,0,52 BRDA:67,13,1,44 -BRDA:79,14,0,0 -BRDA:79,14,1,44 -BRDA:95,15,0,52 -BRDA:95,15,1,46 -BRDA:97,16,0,25 -BRDA:97,16,1,27 -BRDA:103,17,0,63 -BRDA:103,17,1,0 -BRDA:109,18,0,46 -BRDA:109,18,1,0 -BRDA:112,19,0,100 -BRDA:112,19,1,16 -BRF:38 -BRH:38 +BRDA:85,14,0,52 +BRDA:85,14,1,46 +BRDA:87,15,0,25 +BRDA:87,15,1,27 +BRDA:93,16,0,63 +BRDA:93,16,1,0 +BRDA:99,17,0,46 +BRDA:99,17,1,0 +BRDA:102,18,0,100 +BRDA:102,18,1,16 +BRF:36 +BRH:36 end_of_record diff --git a/esm/index.js b/esm/index.js index 82f7df4..c7b547f 100644 --- a/esm/index.js +++ b/esm/index.js @@ -72,21 +72,11 @@ const domdiff = ( } else { let el = currentNodes[index]; - // until I am sure the else could never happen - // it might be a vDOM thing 'cause it never happens here - /* istanbul ignore if */ - if (el != futureStartNode) { - parentNode.insertBefore( - get(futureStartNode), - get(currentStartNode) - ); - } else { - currentNodes[index] = null; - parentNode.insertBefore( - get(el), - get(currentStartNode) - ); - } + currentNodes[index] = null; + parentNode.insertBefore( + get(el), + get(currentStartNode) + ); futureStartNode = futureNodes[++futureStart]; } } @@ -96,14 +86,14 @@ const domdiff = ( const place = pin != null ? get(pin) : before; while (futureStart <= futureEnd) { const ch = futureNodes[futureStart++]; - // until I am sure the else could never happen - // it might be a vDOM thing 'cause it never happens here + // ignore until I am sure the else could never happen. + // it might be a vDOM thing 'cause it never happens here. /* istanbul ignore else */ if (ch != null) parentNode.insertBefore(get(ch), place); } } - // until I am sure the else could never happen - // it might be a vDOM thing 'cause it never happens here + // ignore until I am sure the else could never happen. + // it might be a vDOM thing 'cause it never happens here. /* istanbul ignore else */ else if (futureStart > futureEnd) { while (currentStart <= currentEnd) { diff --git a/index.js b/index.js index da05841..0b9ef5f 100644 --- a/index.js +++ b/index.js @@ -1,4 +1,4 @@ -var domdiff = (function (exports) { +var domdiff = (function () { 'use strict'; /*! (c) 2017 Andrea Giammarchi (ISC) */ @@ -59,15 +59,8 @@ beforeNode // optional item/node to use as insertBefore delimiter futureStartNode = futureNodes[++futureStart]; } else { var el = currentNodes[index]; - // until I am sure the else could never happen - // it might be a vDOM thing 'cause it never happens here - /* istanbul ignore if */ - if (el != futureStartNode) { - parentNode.insertBefore(get(futureStartNode), get(currentStartNode)); - } else { - currentNodes[index] = null; - parentNode.insertBefore(get(el), get(currentStartNode)); - } + currentNodes[index] = null; + parentNode.insertBefore(get(el), get(currentStartNode)); futureStartNode = futureNodes[++futureStart]; } } @@ -77,14 +70,14 @@ beforeNode // optional item/node to use as insertBefore delimiter var place = pin != null ? get(pin) : before; while (futureStart <= futureEnd) { var ch = futureNodes[futureStart++]; - // until I am sure the else could never happen - // it might be a vDOM thing 'cause it never happens here + // ignore until I am sure the else could never happen. + // it might be a vDOM thing 'cause it never happens here. /* istanbul ignore else */ if (ch != null) parentNode.insertBefore(get(ch), place); } } - // until I am sure the else could never happen - // it might be a vDOM thing 'cause it never happens here + // ignore until I am sure the else could never happen. + // it might be a vDOM thing 'cause it never happens here. /* istanbul ignore else */ else if (futureStart > futureEnd) { while (currentStart <= currentEnd) { @@ -99,4 +92,4 @@ beforeNode // optional item/node to use as insertBefore delimiter return domdiff; -}({})); +}()); diff --git a/min.js b/min.js index 239a5e8..35be8c7 100644 --- a/min.js +++ b/min.js @@ -1,2 +1,2 @@ -var domdiff=function(e){"use strict";/*! (c) 2017 Andrea Giammarchi (ISC) */ -var l=function(e){return e};return function(e,r,n,f,i){for(var s=f||l,t=null==i?null:s(i),u=0,o=0,v=r.length-1,a=r[0],B=r[v],c=n.length-1,d=n[0],g=n[c];u<=v&&o<=c;)if(null==a)a=r[++u];else if(null==B)B=r[--v];else if(null==d)d=n[++o];else if(null==g)g=n[--c];else if(a==d)a=r[++u],d=n[++o];else if(B==g)B=r[--v],g=n[--c];else if(a==g)e.insertBefore(s(a),s(B).nextSibling||t),a=r[++u],g=n[--c];else if(B==d)e.insertBefore(s(B),s(a)),B=r[--v],d=n[++o];else{var h=r.indexOf(d);if(h<0)e.insertBefore(s(d),s(a)),d=n[++o];else{var m=r[h];m!=d?e.insertBefore(s(d),s(a)):(r[h]=null,e.insertBefore(s(m),s(a))),d=n[++o]}}if(u>v)for(var x=n[c+1],b=null!=x?s(x):t;o<=c;){var C=n[o++];null!=C&&e.insertBefore(s(C),b)}else if(o>c)for(;u<=v;){var O=r[u++];null!=O&&e.removeChild(s(O))}return n}}(); \ No newline at end of file +var domdiff=function(){"use strict";/*! (c) 2017 Andrea Giammarchi (ISC) */ +var e=function(e){return e};return function(l,n,r,f,i){for(var s=f||e,u=null==i?null:s(i),t=0,o=0,v=n.length-1,a=n[0],B=n[v],c=r.length-1,d=r[0],g=r[c];t<=v&&o<=c;)if(null==a)a=n[++t];else if(null==B)B=n[--v];else if(null==d)d=r[++o];else if(null==g)g=r[--c];else if(a==d)a=n[++t],d=r[++o];else if(B==g)B=n[--v],g=r[--c];else if(a==g)l.insertBefore(s(a),s(B).nextSibling||u),a=n[++t],g=r[--c];else if(B==d)l.insertBefore(s(B),s(a)),B=n[--v],d=r[++o];else{var h=n.indexOf(d);if(h<0)l.insertBefore(s(d),s(a)),d=r[++o];else{var m=n[h];n[h]=null,l.insertBefore(s(m),s(a)),d=r[++o]}}if(t>v)for(var x=r[c+1],b=null!=x?s(x):u;o<=c;){var C=r[o++];null!=C&&l.insertBefore(s(C),b)}else if(o>c)for(;t<=v;){var O=n[t++];null!=O&&l.removeChild(s(O))}return r}}(); \ No newline at end of file diff --git a/package.json b/package.json index 2ef703f..3f42ddb 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "scripts": { "build": "npm run cjs && npm run bundle && npm run min && npm run test && npm run size", "bundle": "rollup --config rollup.config.js && npm run cleanup", - "cleanup": "echo \"$(cat index.js | sed 's/return exports;/return domdiff;/' | sed -e 's/exports.*;//g')\" > index.js", + "cleanup": "echo \"$(cat index.js | sed 's/return exports;/return domdiff;/' | sed -e 's/exports.*;//g' | sed 's/exports//' | sed 's/}({}));/}());/')\" > index.js", "cjs": "ascjs ./esm ./cjs", "coveralls": "cat ./coverage/lcov.info | coveralls", "min": "uglifyjs index.js --support-ie8 --comments=/^!/ -cmo min.js", diff --git a/test/test.js b/test/test.js index e179b39..29b2646 100644 --- a/test/test.js +++ b/test/test.js @@ -896,3 +896,5 @@ newState = domdiff( [nodes.a, nodes.b, nodes.c, nodes.d, nodes.e, nodes.f].reverse() ); compare(newState, 'fedcba'); + +tressa.end(); From e10cbda0cf28d727463418e1f4d3b07d2b5d6699 Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Mon, 4 Dec 2017 17:47:10 -0200 Subject: [PATCH 05/71] 0.1.5 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3f42ddb..9bd8c82 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "domdiff", - "version": "0.1.4", + "version": "0.1.5", "description": "A fast and simple way to diff childNodes", "browser": "min.js", "main": "cjs/index.js", From d5d886d67da85d44c3892d5b0223979236c4ffaa Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Tue, 5 Dec 2017 04:58:05 -0200 Subject: [PATCH 06/71] added second getNode(item, info) parameter + README --- README.md | 91 ++++++++++++++++++++++++++ cjs/index.js | 24 +++---- coverage/coverage.json | 2 +- coverage/lcov-report/cjs/index.html | 6 +- coverage/lcov-report/cjs/index.js.html | 28 ++++---- coverage/lcov-report/index.html | 6 +- coverage/lcov.info | 34 +++++----- esm/index.js | 24 +++---- index.js | 16 ++--- min.js | 2 +- 10 files changed, 161 insertions(+), 72 deletions(-) diff --git a/README.md b/README.md index c4229aa..85085f0 100644 --- a/README.md +++ b/README.md @@ -56,3 +56,94 @@ parentNode.textContent; ### Compatibility: Every. JavaScript. Engine. + + +### A `getNode` callback for complex data + +The `getNode(item, info)` is invoked per each operation on the DOM. + +This can be useful to represent node through wrappers, whenever that is needed. + +The passed `info` value can be: + + * `1` when the item/node is being appended + * `0` when the item/node is being used as insert _before_ reference + * `-0` when the item/node is being used as insert _after_ reference + * `-1` when the item/node is being removed + +```js +function getNode(item, i) { + // case removal or case after + if ((1 / i) < 0) { + // case removal + if (i) { + // if the item has more than a node + // remove all other nodes at once + if (item.length > 1) { + const range = document.createRange(); + range.setStartBefore(item[1]); + range.setEndAfter(item[item.length - 1]); + debugger; + range.deleteContents(); + } + // return the first node to be removed + return item[0]; + } + // case after + else { + return item[item.length - 1]; + } + } + // case insert + else if (i) { + const fragment = document.createDocumentFragment(); + fragment.append(...item); + return fragment; + } + // case before + else { + return item[0]; + } +} + +const and = [document.createTextNode(' & ')]; + +const Bob = [ + document.createTextNode('B'), + document.createTextNode('o'), + document.createTextNode('b') +]; + +const Lucy = [ + document.createTextNode('L'), + document.createTextNode('u'), + document.createTextNode('c'), + document.createTextNode('y') +]; + +// clean the body for demo purpose +document.body.textContent = ''; +let content = domdiff( + document.body, + [], + [Bob, and, Lucy], + getNode +); + +// ... later on ... +content = domdiff( + document.body, + content, + [Lucy, and, Bob], + getNode +); + +// clean up +domdiff( + document.body, + content, + [], + getNode +); + +``` diff --git a/cjs/index.js b/cjs/index.js index 548a418..f5c6a6d 100644 --- a/cjs/index.js +++ b/cjs/index.js @@ -17,7 +17,7 @@ const domdiff = ( beforeNode // optional item/node to use as insertBefore delimiter ) => { const get = getNode || identity; - const before = beforeNode == null ? null : get(beforeNode); + const before = beforeNode == null ? null : get(beforeNode, 0); let currentStart = 0, futureStart = 0; let currentEnd = currentNodes.length - 1; let currentStartNode = currentNodes[0]; @@ -48,16 +48,16 @@ const domdiff = ( } else if (currentStartNode == futureEndNode) { parentNode.insertBefore( - get(currentStartNode), - get(currentEndNode).nextSibling || before + get(currentStartNode, 1), + get(currentEndNode, -0).nextSibling ); currentStartNode = currentNodes[++currentStart]; futureEndNode = futureNodes[--futureEnd]; } else if (currentEndNode == futureStartNode) { parentNode.insertBefore( - get(currentEndNode), - get(currentStartNode) + get(currentEndNode, 1), + get(currentStartNode, 0) ); currentEndNode = currentNodes[--currentEnd]; futureStartNode = futureNodes[++futureStart]; @@ -66,8 +66,8 @@ const domdiff = ( let index = currentNodes.indexOf(futureStartNode); if (index < 0) { parentNode.insertBefore( - get(futureStartNode), - get(currentStartNode) + get(futureStartNode, 1), + get(currentStartNode, 0) ); futureStartNode = futureNodes[++futureStart]; } @@ -75,8 +75,8 @@ const domdiff = ( let el = currentNodes[index]; currentNodes[index] = null; parentNode.insertBefore( - get(el), - get(currentStartNode) + get(el, 1), + get(currentStartNode, 0) ); futureStartNode = futureNodes[++futureStart]; } @@ -84,13 +84,13 @@ const domdiff = ( } if (currentStart > currentEnd) { const pin = futureNodes[futureEnd + 1]; - const place = pin != null ? get(pin) : before; + const place = pin != null ? get(pin, 0) : before; while (futureStart <= futureEnd) { const ch = futureNodes[futureStart++]; // ignore until I am sure the else could never happen. // it might be a vDOM thing 'cause it never happens here. /* istanbul ignore else */ - if (ch != null) parentNode.insertBefore(get(ch), place); + if (ch != null) parentNode.insertBefore(get(ch, 1), place); } } // ignore until I am sure the else could never happen. @@ -99,7 +99,7 @@ const domdiff = ( else if (futureStart > futureEnd) { while (currentStart <= currentEnd) { const ch = currentNodes[currentStart++]; - if (ch != null) parentNode.removeChild(get(ch)); + if (ch != null) parentNode.removeChild(get(ch, -1)); } } return futureNodes; diff --git a/coverage/coverage.json b/coverage/coverage.json index 8f0b6aa..677e831 100644 --- a/coverage/coverage.json +++ b/coverage/coverage.json @@ -1 +1 @@ -{"/home/webreflection/code/domdiff/cjs/index.js":{"path":"/home/webreflection/code/domdiff/cjs/index.js","s":{"1":1,"2":569,"3":1,"4":98,"5":98,"6":98,"7":98,"8":98,"9":98,"10":98,"11":98,"12":98,"13":98,"14":447,"15":44,"16":403,"17":11,"18":392,"19":22,"20":370,"21":5,"22":365,"23":140,"24":140,"25":225,"26":50,"27":50,"28":175,"29":52,"30":52,"31":52,"32":123,"33":27,"34":27,"35":27,"36":96,"37":96,"38":52,"39":52,"40":44,"41":44,"42":44,"43":44,"44":98,"45":52,"46":52,"47":52,"48":63,"49":63,"50":63,"51":46,"52":46,"53":116,"54":116,"55":100,"56":98,"57":1},"b":{"1":[98,96],"2":[50,48],"3":[545,493],"4":[44,403],"5":[11,392],"6":[22,370],"7":[5,365],"8":[140,225],"9":[50,175],"10":[52,123],"11":[52,9],"12":[27,96],"13":[52,44],"14":[52,46],"15":[25,27],"16":[63,0],"17":[46,0],"18":[100,16]},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":10,"column":0},"end":{"line":10,"column":24}},"2":{"start":{"line":10,"column":22},"end":{"line":10,"column":23}},"3":{"start":{"line":12,"column":0},"end":{"line":106,"column":2}},"4":{"start":{"line":19,"column":2},"end":{"line":19,"column":34}},"5":{"start":{"line":20,"column":2},"end":{"line":20,"column":61}},"6":{"start":{"line":21,"column":2},"end":{"line":21,"column":40}},"7":{"start":{"line":22,"column":2},"end":{"line":22,"column":43}},"8":{"start":{"line":23,"column":2},"end":{"line":23,"column":41}},"9":{"start":{"line":24,"column":2},"end":{"line":24,"column":48}},"10":{"start":{"line":25,"column":2},"end":{"line":25,"column":41}},"11":{"start":{"line":26,"column":2},"end":{"line":26,"column":39}},"12":{"start":{"line":27,"column":2},"end":{"line":27,"column":45}},"13":{"start":{"line":28,"column":2},"end":{"line":84,"column":3}},"14":{"start":{"line":29,"column":4},"end":{"line":83,"column":5}},"15":{"start":{"line":30,"column":6},"end":{"line":30,"column":54}},"16":{"start":{"line":32,"column":9},"end":{"line":83,"column":5}},"17":{"start":{"line":33,"column":6},"end":{"line":33,"column":50}},"18":{"start":{"line":35,"column":9},"end":{"line":83,"column":5}},"19":{"start":{"line":36,"column":6},"end":{"line":36,"column":51}},"20":{"start":{"line":38,"column":9},"end":{"line":83,"column":5}},"21":{"start":{"line":39,"column":6},"end":{"line":39,"column":47}},"22":{"start":{"line":41,"column":9},"end":{"line":83,"column":5}},"23":{"start":{"line":42,"column":6},"end":{"line":42,"column":54}},"24":{"start":{"line":43,"column":6},"end":{"line":43,"column":51}},"25":{"start":{"line":45,"column":9},"end":{"line":83,"column":5}},"26":{"start":{"line":46,"column":6},"end":{"line":46,"column":50}},"27":{"start":{"line":47,"column":6},"end":{"line":47,"column":47}},"28":{"start":{"line":49,"column":9},"end":{"line":83,"column":5}},"29":{"start":{"line":50,"column":6},"end":{"line":53,"column":8}},"30":{"start":{"line":54,"column":6},"end":{"line":54,"column":54}},"31":{"start":{"line":55,"column":6},"end":{"line":55,"column":47}},"32":{"start":{"line":57,"column":9},"end":{"line":83,"column":5}},"33":{"start":{"line":58,"column":6},"end":{"line":61,"column":8}},"34":{"start":{"line":62,"column":6},"end":{"line":62,"column":50}},"35":{"start":{"line":63,"column":6},"end":{"line":63,"column":51}},"36":{"start":{"line":66,"column":6},"end":{"line":66,"column":56}},"37":{"start":{"line":67,"column":6},"end":{"line":82,"column":7}},"38":{"start":{"line":68,"column":8},"end":{"line":71,"column":10}},"39":{"start":{"line":72,"column":8},"end":{"line":72,"column":53}},"40":{"start":{"line":75,"column":8},"end":{"line":75,"column":37}},"41":{"start":{"line":76,"column":8},"end":{"line":76,"column":35}},"42":{"start":{"line":77,"column":8},"end":{"line":80,"column":10}},"43":{"start":{"line":81,"column":8},"end":{"line":81,"column":53}},"44":{"start":{"line":85,"column":2},"end":{"line":104,"column":3}},"45":{"start":{"line":86,"column":4},"end":{"line":86,"column":43}},"46":{"start":{"line":87,"column":4},"end":{"line":87,"column":50}},"47":{"start":{"line":88,"column":4},"end":{"line":94,"column":5}},"48":{"start":{"line":89,"column":6},"end":{"line":89,"column":44}},"49":{"start":{"line":93,"column":6},"end":{"line":93,"column":62}},"50":{"start":{"line":93,"column":22},"end":{"line":93,"column":62}},"51":{"start":{"line":99,"column":7},"end":{"line":104,"column":3}},"52":{"start":{"line":100,"column":4},"end":{"line":103,"column":5}},"53":{"start":{"line":101,"column":6},"end":{"line":101,"column":46}},"54":{"start":{"line":102,"column":6},"end":{"line":102,"column":54}},"55":{"start":{"line":102,"column":22},"end":{"line":102,"column":54}},"56":{"start":{"line":105,"column":2},"end":{"line":105,"column":21}},"57":{"start":{"line":108,"column":0},"end":{"line":108,"column":78}}},"branchMap":{"1":{"line":19,"type":"binary-expr","locations":[{"start":{"line":19,"column":14},"end":{"line":19,"column":21}},{"start":{"line":19,"column":25},"end":{"line":19,"column":33}}]},"2":{"line":20,"type":"cond-expr","locations":[{"start":{"line":20,"column":38},"end":{"line":20,"column":42}},{"start":{"line":20,"column":45},"end":{"line":20,"column":60}}]},"3":{"line":28,"type":"binary-expr","locations":[{"start":{"line":28,"column":9},"end":{"line":28,"column":35}},{"start":{"line":28,"column":39},"end":{"line":28,"column":63}}]},"4":{"line":29,"type":"if","locations":[{"start":{"line":29,"column":4},"end":{"line":29,"column":4}},{"start":{"line":29,"column":4},"end":{"line":29,"column":4}}]},"5":{"line":32,"type":"if","locations":[{"start":{"line":32,"column":9},"end":{"line":32,"column":9}},{"start":{"line":32,"column":9},"end":{"line":32,"column":9}}]},"6":{"line":35,"type":"if","locations":[{"start":{"line":35,"column":9},"end":{"line":35,"column":9}},{"start":{"line":35,"column":9},"end":{"line":35,"column":9}}]},"7":{"line":38,"type":"if","locations":[{"start":{"line":38,"column":9},"end":{"line":38,"column":9}},{"start":{"line":38,"column":9},"end":{"line":38,"column":9}}]},"8":{"line":41,"type":"if","locations":[{"start":{"line":41,"column":9},"end":{"line":41,"column":9}},{"start":{"line":41,"column":9},"end":{"line":41,"column":9}}]},"9":{"line":45,"type":"if","locations":[{"start":{"line":45,"column":9},"end":{"line":45,"column":9}},{"start":{"line":45,"column":9},"end":{"line":45,"column":9}}]},"10":{"line":49,"type":"if","locations":[{"start":{"line":49,"column":9},"end":{"line":49,"column":9}},{"start":{"line":49,"column":9},"end":{"line":49,"column":9}}]},"11":{"line":52,"type":"binary-expr","locations":[{"start":{"line":52,"column":8},"end":{"line":52,"column":39}},{"start":{"line":52,"column":43},"end":{"line":52,"column":49}}]},"12":{"line":57,"type":"if","locations":[{"start":{"line":57,"column":9},"end":{"line":57,"column":9}},{"start":{"line":57,"column":9},"end":{"line":57,"column":9}}]},"13":{"line":67,"type":"if","locations":[{"start":{"line":67,"column":6},"end":{"line":67,"column":6}},{"start":{"line":67,"column":6},"end":{"line":67,"column":6}}]},"14":{"line":85,"type":"if","locations":[{"start":{"line":85,"column":2},"end":{"line":85,"column":2}},{"start":{"line":85,"column":2},"end":{"line":85,"column":2}}]},"15":{"line":87,"type":"cond-expr","locations":[{"start":{"line":87,"column":32},"end":{"line":87,"column":40}},{"start":{"line":87,"column":43},"end":{"line":87,"column":49}}]},"16":{"line":93,"type":"if","locations":[{"start":{"line":93,"column":6},"end":{"line":93,"column":6}},{"start":{"line":93,"column":6},"end":{"line":93,"column":6},"skip":true}]},"17":{"line":99,"type":"if","locations":[{"start":{"line":99,"column":7},"end":{"line":99,"column":7}},{"start":{"line":99,"column":7},"end":{"line":99,"column":7},"skip":true}]},"18":{"line":102,"type":"if","locations":[{"start":{"line":102,"column":6},"end":{"line":102,"column":6}},{"start":{"line":102,"column":6},"end":{"line":102,"column":6}}]}}}} \ No newline at end of file +{"/home/webreflection/code/domdiff/cjs/index.js":{"path":"/home/webreflection/code/domdiff/cjs/index.js","s":{"1":1,"2":569,"3":1,"4":98,"5":98,"6":98,"7":98,"8":98,"9":98,"10":98,"11":98,"12":98,"13":98,"14":447,"15":44,"16":403,"17":11,"18":392,"19":22,"20":370,"21":5,"22":365,"23":140,"24":140,"25":225,"26":50,"27":50,"28":175,"29":52,"30":52,"31":52,"32":123,"33":27,"34":27,"35":27,"36":96,"37":96,"38":52,"39":52,"40":44,"41":44,"42":44,"43":44,"44":98,"45":52,"46":52,"47":52,"48":63,"49":63,"50":63,"51":46,"52":46,"53":116,"54":116,"55":100,"56":98,"57":1},"b":{"1":[98,96],"2":[50,48],"3":[545,493],"4":[44,403],"5":[11,392],"6":[22,370],"7":[5,365],"8":[140,225],"9":[50,175],"10":[52,123],"11":[27,96],"12":[52,44],"13":[52,46],"14":[25,27],"15":[63,0],"16":[46,0],"17":[100,16]},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":10,"column":0},"end":{"line":10,"column":24}},"2":{"start":{"line":10,"column":22},"end":{"line":10,"column":23}},"3":{"start":{"line":12,"column":0},"end":{"line":106,"column":2}},"4":{"start":{"line":19,"column":2},"end":{"line":19,"column":34}},"5":{"start":{"line":20,"column":2},"end":{"line":20,"column":64}},"6":{"start":{"line":21,"column":2},"end":{"line":21,"column":40}},"7":{"start":{"line":22,"column":2},"end":{"line":22,"column":43}},"8":{"start":{"line":23,"column":2},"end":{"line":23,"column":41}},"9":{"start":{"line":24,"column":2},"end":{"line":24,"column":48}},"10":{"start":{"line":25,"column":2},"end":{"line":25,"column":41}},"11":{"start":{"line":26,"column":2},"end":{"line":26,"column":39}},"12":{"start":{"line":27,"column":2},"end":{"line":27,"column":45}},"13":{"start":{"line":28,"column":2},"end":{"line":84,"column":3}},"14":{"start":{"line":29,"column":4},"end":{"line":83,"column":5}},"15":{"start":{"line":30,"column":6},"end":{"line":30,"column":54}},"16":{"start":{"line":32,"column":9},"end":{"line":83,"column":5}},"17":{"start":{"line":33,"column":6},"end":{"line":33,"column":50}},"18":{"start":{"line":35,"column":9},"end":{"line":83,"column":5}},"19":{"start":{"line":36,"column":6},"end":{"line":36,"column":51}},"20":{"start":{"line":38,"column":9},"end":{"line":83,"column":5}},"21":{"start":{"line":39,"column":6},"end":{"line":39,"column":47}},"22":{"start":{"line":41,"column":9},"end":{"line":83,"column":5}},"23":{"start":{"line":42,"column":6},"end":{"line":42,"column":54}},"24":{"start":{"line":43,"column":6},"end":{"line":43,"column":51}},"25":{"start":{"line":45,"column":9},"end":{"line":83,"column":5}},"26":{"start":{"line":46,"column":6},"end":{"line":46,"column":50}},"27":{"start":{"line":47,"column":6},"end":{"line":47,"column":47}},"28":{"start":{"line":49,"column":9},"end":{"line":83,"column":5}},"29":{"start":{"line":50,"column":6},"end":{"line":53,"column":8}},"30":{"start":{"line":54,"column":6},"end":{"line":54,"column":54}},"31":{"start":{"line":55,"column":6},"end":{"line":55,"column":47}},"32":{"start":{"line":57,"column":9},"end":{"line":83,"column":5}},"33":{"start":{"line":58,"column":6},"end":{"line":61,"column":8}},"34":{"start":{"line":62,"column":6},"end":{"line":62,"column":50}},"35":{"start":{"line":63,"column":6},"end":{"line":63,"column":51}},"36":{"start":{"line":66,"column":6},"end":{"line":66,"column":56}},"37":{"start":{"line":67,"column":6},"end":{"line":82,"column":7}},"38":{"start":{"line":68,"column":8},"end":{"line":71,"column":10}},"39":{"start":{"line":72,"column":8},"end":{"line":72,"column":53}},"40":{"start":{"line":75,"column":8},"end":{"line":75,"column":37}},"41":{"start":{"line":76,"column":8},"end":{"line":76,"column":35}},"42":{"start":{"line":77,"column":8},"end":{"line":80,"column":10}},"43":{"start":{"line":81,"column":8},"end":{"line":81,"column":53}},"44":{"start":{"line":85,"column":2},"end":{"line":104,"column":3}},"45":{"start":{"line":86,"column":4},"end":{"line":86,"column":43}},"46":{"start":{"line":87,"column":4},"end":{"line":87,"column":53}},"47":{"start":{"line":88,"column":4},"end":{"line":94,"column":5}},"48":{"start":{"line":89,"column":6},"end":{"line":89,"column":44}},"49":{"start":{"line":93,"column":6},"end":{"line":93,"column":65}},"50":{"start":{"line":93,"column":22},"end":{"line":93,"column":65}},"51":{"start":{"line":99,"column":7},"end":{"line":104,"column":3}},"52":{"start":{"line":100,"column":4},"end":{"line":103,"column":5}},"53":{"start":{"line":101,"column":6},"end":{"line":101,"column":46}},"54":{"start":{"line":102,"column":6},"end":{"line":102,"column":58}},"55":{"start":{"line":102,"column":22},"end":{"line":102,"column":58}},"56":{"start":{"line":105,"column":2},"end":{"line":105,"column":21}},"57":{"start":{"line":108,"column":0},"end":{"line":108,"column":78}}},"branchMap":{"1":{"line":19,"type":"binary-expr","locations":[{"start":{"line":19,"column":14},"end":{"line":19,"column":21}},{"start":{"line":19,"column":25},"end":{"line":19,"column":33}}]},"2":{"line":20,"type":"cond-expr","locations":[{"start":{"line":20,"column":38},"end":{"line":20,"column":42}},{"start":{"line":20,"column":45},"end":{"line":20,"column":63}}]},"3":{"line":28,"type":"binary-expr","locations":[{"start":{"line":28,"column":9},"end":{"line":28,"column":35}},{"start":{"line":28,"column":39},"end":{"line":28,"column":63}}]},"4":{"line":29,"type":"if","locations":[{"start":{"line":29,"column":4},"end":{"line":29,"column":4}},{"start":{"line":29,"column":4},"end":{"line":29,"column":4}}]},"5":{"line":32,"type":"if","locations":[{"start":{"line":32,"column":9},"end":{"line":32,"column":9}},{"start":{"line":32,"column":9},"end":{"line":32,"column":9}}]},"6":{"line":35,"type":"if","locations":[{"start":{"line":35,"column":9},"end":{"line":35,"column":9}},{"start":{"line":35,"column":9},"end":{"line":35,"column":9}}]},"7":{"line":38,"type":"if","locations":[{"start":{"line":38,"column":9},"end":{"line":38,"column":9}},{"start":{"line":38,"column":9},"end":{"line":38,"column":9}}]},"8":{"line":41,"type":"if","locations":[{"start":{"line":41,"column":9},"end":{"line":41,"column":9}},{"start":{"line":41,"column":9},"end":{"line":41,"column":9}}]},"9":{"line":45,"type":"if","locations":[{"start":{"line":45,"column":9},"end":{"line":45,"column":9}},{"start":{"line":45,"column":9},"end":{"line":45,"column":9}}]},"10":{"line":49,"type":"if","locations":[{"start":{"line":49,"column":9},"end":{"line":49,"column":9}},{"start":{"line":49,"column":9},"end":{"line":49,"column":9}}]},"11":{"line":57,"type":"if","locations":[{"start":{"line":57,"column":9},"end":{"line":57,"column":9}},{"start":{"line":57,"column":9},"end":{"line":57,"column":9}}]},"12":{"line":67,"type":"if","locations":[{"start":{"line":67,"column":6},"end":{"line":67,"column":6}},{"start":{"line":67,"column":6},"end":{"line":67,"column":6}}]},"13":{"line":85,"type":"if","locations":[{"start":{"line":85,"column":2},"end":{"line":85,"column":2}},{"start":{"line":85,"column":2},"end":{"line":85,"column":2}}]},"14":{"line":87,"type":"cond-expr","locations":[{"start":{"line":87,"column":32},"end":{"line":87,"column":43}},{"start":{"line":87,"column":46},"end":{"line":87,"column":52}}]},"15":{"line":93,"type":"if","locations":[{"start":{"line":93,"column":6},"end":{"line":93,"column":6}},{"start":{"line":93,"column":6},"end":{"line":93,"column":6},"skip":true}]},"16":{"line":99,"type":"if","locations":[{"start":{"line":99,"column":7},"end":{"line":99,"column":7}},{"start":{"line":99,"column":7},"end":{"line":99,"column":7},"skip":true}]},"17":{"line":102,"type":"if","locations":[{"start":{"line":102,"column":6},"end":{"line":102,"column":6}},{"start":{"line":102,"column":6},"end":{"line":102,"column":6}}]}}}} \ No newline at end of file diff --git a/coverage/lcov-report/cjs/index.html b/coverage/lcov-report/cjs/index.html index 564fa76..d31dcd0 100644 --- a/coverage/lcov-report/cjs/index.html +++ b/coverage/lcov-report/cjs/index.html @@ -27,7 +27,7 @@

100% Branches - 36/36 + 34/34
100% @@ -68,7 +68,7 @@

100% 57/57 100% - 36/36 + 34/34 100% 0/0 100% @@ -81,7 +81,7 @@

diff --git a/coverage/lcov-report/cjs/index.js.html b/coverage/lcov-report/cjs/index.js.html index 5cd1b9d..9ef76d1 100644 --- a/coverage/lcov-report/cjs/index.js.html +++ b/coverage/lcov-report/cjs/index.js.html @@ -27,7 +27,7 @@

100% Branches - 36/36 + 34/34
100% @@ -282,7 +282,7 @@

beforeNode // optional item/node to use as insertBefore delimiter ) => { const get = getNode || identity; - const before = beforeNode == null ? null : get(beforeNode); + const before = beforeNode == null ? null : get(beforeNode, 0); let currentStart = 0, futureStart = 0; let currentEnd = currentNodes.length - 1; let currentStartNode = currentNodes[0]; @@ -313,16 +313,16 @@

} else if (currentStartNode == futureEndNode) { parentNode.insertBefore( - get(currentStartNode), - get(currentEndNode).nextSibling || before + get(currentStartNode, 1), + get(currentEndNode, -0).nextSibling ); currentStartNode = currentNodes[++currentStart]; futureEndNode = futureNodes[--futureEnd]; } else if (currentEndNode == futureStartNode) { parentNode.insertBefore( - get(currentEndNode), - get(currentStartNode) + get(currentEndNode, 1), + get(currentStartNode, 0) ); currentEndNode = currentNodes[--currentEnd]; futureStartNode = futureNodes[++futureStart]; @@ -331,8 +331,8 @@

let index = currentNodes.indexOf(futureStartNode); if (index < 0) { parentNode.insertBefore( - get(futureStartNode), - get(currentStartNode) + get(futureStartNode, 1), + get(currentStartNode, 0) ); futureStartNode = futureNodes[++futureStart]; } @@ -340,8 +340,8 @@

let el = currentNodes[index]; currentNodes[index] = null; parentNode.insertBefore( - get(el), - get(currentStartNode) + get(el, 1), + get(currentStartNode, 0) ); futureStartNode = futureNodes[++futureStart]; } @@ -349,13 +349,13 @@

} if (currentStart > currentEnd) { const pin = futureNodes[futureEnd + 1]; - const place = pin != null ? get(pin) : before; + const place = pin != null ? get(pin, 0) : before; while (futureStart <= futureEnd) { const ch = futureNodes[futureStart++]; // ignore until I am sure the else could never happen. // it might be a vDOM thing 'cause it never happens here. /* istanbul ignore else */ - Eif (ch != null) parentNode.insertBefore(get(ch), place); + Eif (ch != null) parentNode.insertBefore(get(ch, 1), place); } } // ignore until I am sure the else could never happen. @@ -364,7 +364,7 @@

else Eif (futureStart > futureEnd) { while (currentStart <= currentEnd) { const ch = currentNodes[currentStart++]; - if (ch != null) parentNode.removeChild(get(ch)); + if (ch != null) parentNode.removeChild(get(ch, -1)); } } return futureNodes; @@ -377,7 +377,7 @@

diff --git a/coverage/lcov-report/index.html b/coverage/lcov-report/index.html index f0972b8..ea66d67 100644 --- a/coverage/lcov-report/index.html +++ b/coverage/lcov-report/index.html @@ -27,7 +27,7 @@

100% Branches - 36/36 + 34/34
100% @@ -68,7 +68,7 @@

100% 57/57 100% - 36/36 + 34/34 100% 0/0 100% @@ -81,7 +81,7 @@

diff --git a/coverage/lcov.info b/coverage/lcov.info index 37f4467..5e48c6e 100644 --- a/coverage/lcov.info +++ b/coverage/lcov.info @@ -78,22 +78,20 @@ BRDA:45,9,0,50 BRDA:45,9,1,175 BRDA:49,10,0,52 BRDA:49,10,1,123 -BRDA:52,11,0,52 -BRDA:52,11,1,9 -BRDA:57,12,0,27 -BRDA:57,12,1,96 -BRDA:67,13,0,52 -BRDA:67,13,1,44 -BRDA:85,14,0,52 -BRDA:85,14,1,46 -BRDA:87,15,0,25 -BRDA:87,15,1,27 -BRDA:93,16,0,63 -BRDA:93,16,1,0 -BRDA:99,17,0,46 -BRDA:99,17,1,0 -BRDA:102,18,0,100 -BRDA:102,18,1,16 -BRF:36 -BRH:36 +BRDA:57,11,0,27 +BRDA:57,11,1,96 +BRDA:67,12,0,52 +BRDA:67,12,1,44 +BRDA:85,13,0,52 +BRDA:85,13,1,46 +BRDA:87,14,0,25 +BRDA:87,14,1,27 +BRDA:93,15,0,63 +BRDA:93,15,1,0 +BRDA:99,16,0,46 +BRDA:99,16,1,0 +BRDA:102,17,0,100 +BRDA:102,17,1,16 +BRF:34 +BRH:34 end_of_record diff --git a/esm/index.js b/esm/index.js index c7b547f..f4d2977 100644 --- a/esm/index.js +++ b/esm/index.js @@ -16,7 +16,7 @@ const domdiff = ( beforeNode // optional item/node to use as insertBefore delimiter ) => { const get = getNode || identity; - const before = beforeNode == null ? null : get(beforeNode); + const before = beforeNode == null ? null : get(beforeNode, 0); let currentStart = 0, futureStart = 0; let currentEnd = currentNodes.length - 1; let currentStartNode = currentNodes[0]; @@ -47,16 +47,16 @@ const domdiff = ( } else if (currentStartNode == futureEndNode) { parentNode.insertBefore( - get(currentStartNode), - get(currentEndNode).nextSibling || before + get(currentStartNode, 1), + get(currentEndNode, -0).nextSibling ); currentStartNode = currentNodes[++currentStart]; futureEndNode = futureNodes[--futureEnd]; } else if (currentEndNode == futureStartNode) { parentNode.insertBefore( - get(currentEndNode), - get(currentStartNode) + get(currentEndNode, 1), + get(currentStartNode, 0) ); currentEndNode = currentNodes[--currentEnd]; futureStartNode = futureNodes[++futureStart]; @@ -65,8 +65,8 @@ const domdiff = ( let index = currentNodes.indexOf(futureStartNode); if (index < 0) { parentNode.insertBefore( - get(futureStartNode), - get(currentStartNode) + get(futureStartNode, 1), + get(currentStartNode, 0) ); futureStartNode = futureNodes[++futureStart]; } @@ -74,8 +74,8 @@ const domdiff = ( let el = currentNodes[index]; currentNodes[index] = null; parentNode.insertBefore( - get(el), - get(currentStartNode) + get(el, 1), + get(currentStartNode, 0) ); futureStartNode = futureNodes[++futureStart]; } @@ -83,13 +83,13 @@ const domdiff = ( } if (currentStart > currentEnd) { const pin = futureNodes[futureEnd + 1]; - const place = pin != null ? get(pin) : before; + const place = pin != null ? get(pin, 0) : before; while (futureStart <= futureEnd) { const ch = futureNodes[futureStart++]; // ignore until I am sure the else could never happen. // it might be a vDOM thing 'cause it never happens here. /* istanbul ignore else */ - if (ch != null) parentNode.insertBefore(get(ch), place); + if (ch != null) parentNode.insertBefore(get(ch, 1), place); } } // ignore until I am sure the else could never happen. @@ -98,7 +98,7 @@ const domdiff = ( else if (futureStart > futureEnd) { while (currentStart <= currentEnd) { const ch = currentNodes[currentStart++]; - if (ch != null) parentNode.removeChild(get(ch)); + if (ch != null) parentNode.removeChild(get(ch, -1)); } } return futureNodes; diff --git a/index.js b/index.js index 0b9ef5f..076738e 100644 --- a/index.js +++ b/index.js @@ -20,7 +20,7 @@ getNode, // optional way to retrieve a node from an item beforeNode // optional item/node to use as insertBefore delimiter ) { var get = getNode || identity; - var before = beforeNode == null ? null : get(beforeNode); + var before = beforeNode == null ? null : get(beforeNode, 0); var currentStart = 0, futureStart = 0; var currentEnd = currentNodes.length - 1; @@ -45,35 +45,35 @@ beforeNode // optional item/node to use as insertBefore delimiter currentEndNode = currentNodes[--currentEnd]; futureEndNode = futureNodes[--futureEnd]; } else if (currentStartNode == futureEndNode) { - parentNode.insertBefore(get(currentStartNode), get(currentEndNode).nextSibling || before); + parentNode.insertBefore(get(currentStartNode, 1), get(currentEndNode, -0).nextSibling); currentStartNode = currentNodes[++currentStart]; futureEndNode = futureNodes[--futureEnd]; } else if (currentEndNode == futureStartNode) { - parentNode.insertBefore(get(currentEndNode), get(currentStartNode)); + parentNode.insertBefore(get(currentEndNode, 1), get(currentStartNode, 0)); currentEndNode = currentNodes[--currentEnd]; futureStartNode = futureNodes[++futureStart]; } else { var index = currentNodes.indexOf(futureStartNode); if (index < 0) { - parentNode.insertBefore(get(futureStartNode), get(currentStartNode)); + parentNode.insertBefore(get(futureStartNode, 1), get(currentStartNode, 0)); futureStartNode = futureNodes[++futureStart]; } else { var el = currentNodes[index]; currentNodes[index] = null; - parentNode.insertBefore(get(el), get(currentStartNode)); + parentNode.insertBefore(get(el, 1), get(currentStartNode, 0)); futureStartNode = futureNodes[++futureStart]; } } } if (currentStart > currentEnd) { var pin = futureNodes[futureEnd + 1]; - var place = pin != null ? get(pin) : before; + var place = pin != null ? get(pin, 0) : before; while (futureStart <= futureEnd) { var ch = futureNodes[futureStart++]; // ignore until I am sure the else could never happen. // it might be a vDOM thing 'cause it never happens here. /* istanbul ignore else */ - if (ch != null) parentNode.insertBefore(get(ch), place); + if (ch != null) parentNode.insertBefore(get(ch, 1), place); } } // ignore until I am sure the else could never happen. @@ -82,7 +82,7 @@ beforeNode // optional item/node to use as insertBefore delimiter else if (futureStart > futureEnd) { while (currentStart <= currentEnd) { var _ch = currentNodes[currentStart++]; - if (_ch != null) parentNode.removeChild(get(_ch)); + if (_ch != null) parentNode.removeChild(get(_ch, -1)); } } return futureNodes; diff --git a/min.js b/min.js index 35be8c7..a9992de 100644 --- a/min.js +++ b/min.js @@ -1,2 +1,2 @@ var domdiff=function(){"use strict";/*! (c) 2017 Andrea Giammarchi (ISC) */ -var e=function(e){return e};return function(l,n,r,f,i){for(var s=f||e,u=null==i?null:s(i),t=0,o=0,v=n.length-1,a=n[0],B=n[v],c=r.length-1,d=r[0],g=r[c];t<=v&&o<=c;)if(null==a)a=n[++t];else if(null==B)B=n[--v];else if(null==d)d=r[++o];else if(null==g)g=r[--c];else if(a==d)a=n[++t],d=r[++o];else if(B==g)B=n[--v],g=r[--c];else if(a==g)l.insertBefore(s(a),s(B).nextSibling||u),a=n[++t],g=r[--c];else if(B==d)l.insertBefore(s(B),s(a)),B=n[--v],d=r[++o];else{var h=n.indexOf(d);if(h<0)l.insertBefore(s(d),s(a)),d=r[++o];else{var m=n[h];n[h]=null,l.insertBefore(s(m),s(a)),d=r[++o]}}if(t>v)for(var x=r[c+1],b=null!=x?s(x):u;o<=c;){var C=r[o++];null!=C&&l.insertBefore(s(C),b)}else if(o>c)for(;t<=v;){var O=n[t++];null!=O&&l.removeChild(s(O))}return r}}(); \ No newline at end of file +var e=function(e){return e};return function(l,n,r,f,i){for(var s=f||e,u=null==i?null:s(i,0),t=0,o=0,v=n.length-1,a=n[0],B=n[v],c=r.length-1,d=r[0],g=r[c];t<=v&&o<=c;)if(null==a)a=n[++t];else if(null==B)B=n[--v];else if(null==d)d=r[++o];else if(null==g)g=r[--c];else if(a==d)a=n[++t],d=r[++o];else if(B==g)B=n[--v],g=r[--c];else if(a==g)l.insertBefore(s(a,1),s(B,-0).nextSibling),a=n[++t],g=r[--c];else if(B==d)l.insertBefore(s(B,1),s(a,0)),B=n[--v],d=r[++o];else{var h=n.indexOf(d);if(h<0)l.insertBefore(s(d,1),s(a,0)),d=r[++o];else{var m=n[h];n[h]=null,l.insertBefore(s(m,1),s(a,0)),d=r[++o]}}if(t>v)for(var x=r[c+1],b=null!=x?s(x,0):u;o<=c;){var C=r[o++];null!=C&&l.insertBefore(s(C,1),b)}else if(o>c)for(;t<=v;){var O=n[t++];null!=O&&l.removeChild(s(O,-1))}return r}}(); \ No newline at end of file From c6a77da623d1fb1959268b7a77168c8a43b72dfd Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Tue, 5 Dec 2017 04:58:08 -0200 Subject: [PATCH 07/71] 0.2.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9bd8c82..498fe72 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "domdiff", - "version": "0.1.5", + "version": "0.2.0", "description": "A fast and simple way to diff childNodes", "browser": "min.js", "main": "cjs/index.js", From a5d31f138176b505853f7348e99f02b3cea30a9f Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Tue, 5 Dec 2017 05:50:05 -0200 Subject: [PATCH 08/71] removed debugger from README --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 85085f0..b1614bf 100644 --- a/README.md +++ b/README.md @@ -83,7 +83,6 @@ function getNode(item, i) { const range = document.createRange(); range.setStartBefore(item[1]); range.setEndAfter(item[item.length - 1]); - debugger; range.deleteContents(); } // return the first node to be removed From d9b2111c1bcb446032a9db0c0af111184d7a750a Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Tue, 5 Dec 2017 09:41:42 -0200 Subject: [PATCH 09/71] added CodePen example --- README.md | 2 ++ coverage/lcov-report/cjs/index.html | 2 +- coverage/lcov-report/cjs/index.js.html | 2 +- coverage/lcov-report/index.html | 2 +- 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index b1614bf..627f5a7 100644 --- a/README.md +++ b/README.md @@ -71,6 +71,8 @@ The passed `info` value can be: * `-0` when the item/node is being used as insert _after_ reference * `-1` when the item/node is being removed +[Example](https://codepen.io/WebReflection/pen/bYJVPd?editors=0010) + ```js function getNode(item, i) { // case removal or case after diff --git a/coverage/lcov-report/cjs/index.html b/coverage/lcov-report/cjs/index.html index d31dcd0..fd49e3d 100644 --- a/coverage/lcov-report/cjs/index.html +++ b/coverage/lcov-report/cjs/index.html @@ -81,7 +81,7 @@

diff --git a/coverage/lcov-report/cjs/index.js.html b/coverage/lcov-report/cjs/index.js.html index 9ef76d1..b5f6995 100644 --- a/coverage/lcov-report/cjs/index.js.html +++ b/coverage/lcov-report/cjs/index.js.html @@ -377,7 +377,7 @@

diff --git a/coverage/lcov-report/index.html b/coverage/lcov-report/index.html index ea66d67..b5d15fc 100644 --- a/coverage/lcov-report/index.html +++ b/coverage/lcov-report/index.html @@ -81,7 +81,7 @@

From 8825ee0c675e0bf7818a369e52e4f67c70cc5bfd Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Wed, 6 Dec 2017 11:45:47 -0200 Subject: [PATCH 10/71] extreme performance edition --- cjs/index.js | 42 +++++++-- coverage/coverage.json | 2 +- coverage/lcov-report/cjs/index.html | 22 ++--- coverage/lcov-report/cjs/index.js.html | 118 ++++++++++++++++++++----- coverage/lcov-report/index.html | 22 ++--- coverage/lcov.info | 74 +++++++++++----- esm/index.js | 42 +++++++-- index.js | 46 ++++++++-- min.js | 2 +- test/node.js | 17 ++++ 10 files changed, 290 insertions(+), 97 deletions(-) diff --git a/cjs/index.js b/cjs/index.js index f5c6a6d..fc52de5 100644 --- a/cjs/index.js +++ b/cjs/index.js @@ -83,23 +83,47 @@ const domdiff = ( } } if (currentStart > currentEnd) { - const pin = futureNodes[futureEnd + 1]; - const place = pin != null ? get(pin, 0) : before; - while (futureStart <= futureEnd) { - const ch = futureNodes[futureStart++]; + if (futureStart <= futureEnd) { + const pin = futureNodes[futureEnd + 1]; + const place = pin == null ? before : get(pin, 0); + while (futureNodes[futureStart] == null) futureStart++; + while (futureNodes[futureEnd] == null) futureEnd--; + if (futureStart === futureEnd && futureNodes[futureStart] != null) { + parentNode.insertBefore(get(futureNodes[futureStart], 1), place); + } // ignore until I am sure the else could never happen. // it might be a vDOM thing 'cause it never happens here. /* istanbul ignore else */ - if (ch != null) parentNode.insertBefore(get(ch, 1), place); + else if (futureStart < futureEnd) { + const fragment = parentNode.ownerDocument.createDocumentFragment(); + while (futureStart <= futureEnd) { + const node = futureNodes[futureStart++]; + // ignore until I am sure the else could never happen. + // it might be a vDOM thing 'cause it never happens here. + /* istanbul ignore else */ + if (node != null) fragment.appendChild(get(node, 1)); + } + parentNode.insertBefore(fragment, place); + } } } // ignore until I am sure the else could never happen. // it might be a vDOM thing 'cause it never happens here. /* istanbul ignore else */ - else if (futureStart > futureEnd) { - while (currentStart <= currentEnd) { - const ch = currentNodes[currentStart++]; - if (ch != null) parentNode.removeChild(get(ch, -1)); + else if (futureStart > futureEnd && currentStart <= currentEnd) { + while (currentNodes[currentStart] == null) currentStart++; + while (currentNodes[currentEnd] == null) currentEnd--; + if (currentStart === currentEnd && currentNodes[currentStart] != null) { + parentNode.removeChild(get(currentNodes[currentStart], -1)); + } + // ignore until I am sure the else could never happen. + // it might be a vDOM thing 'cause it never happens here. + /* istanbul ignore else */ + else if (currentStart < currentEnd) { + const range = parentNode.ownerDocument.createRange(); + range.setStartBefore(get(currentNodes[currentStart], -1)); + range.setEndAfter(get(currentNodes[currentEnd], -1)); + range.deleteContents(); } } return futureNodes; diff --git a/coverage/coverage.json b/coverage/coverage.json index 677e831..3bb7033 100644 --- a/coverage/coverage.json +++ b/coverage/coverage.json @@ -1 +1 @@ -{"/home/webreflection/code/domdiff/cjs/index.js":{"path":"/home/webreflection/code/domdiff/cjs/index.js","s":{"1":1,"2":569,"3":1,"4":98,"5":98,"6":98,"7":98,"8":98,"9":98,"10":98,"11":98,"12":98,"13":98,"14":447,"15":44,"16":403,"17":11,"18":392,"19":22,"20":370,"21":5,"22":365,"23":140,"24":140,"25":225,"26":50,"27":50,"28":175,"29":52,"30":52,"31":52,"32":123,"33":27,"34":27,"35":27,"36":96,"37":96,"38":52,"39":52,"40":44,"41":44,"42":44,"43":44,"44":98,"45":52,"46":52,"47":52,"48":63,"49":63,"50":63,"51":46,"52":46,"53":116,"54":116,"55":100,"56":98,"57":1},"b":{"1":[98,96],"2":[50,48],"3":[545,493],"4":[44,403],"5":[11,392],"6":[22,370],"7":[5,365],"8":[140,225],"9":[50,175],"10":[52,123],"11":[27,96],"12":[52,44],"13":[52,46],"14":[25,27],"15":[63,0],"16":[46,0],"17":[100,16]},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":10,"column":0},"end":{"line":10,"column":24}},"2":{"start":{"line":10,"column":22},"end":{"line":10,"column":23}},"3":{"start":{"line":12,"column":0},"end":{"line":106,"column":2}},"4":{"start":{"line":19,"column":2},"end":{"line":19,"column":34}},"5":{"start":{"line":20,"column":2},"end":{"line":20,"column":64}},"6":{"start":{"line":21,"column":2},"end":{"line":21,"column":40}},"7":{"start":{"line":22,"column":2},"end":{"line":22,"column":43}},"8":{"start":{"line":23,"column":2},"end":{"line":23,"column":41}},"9":{"start":{"line":24,"column":2},"end":{"line":24,"column":48}},"10":{"start":{"line":25,"column":2},"end":{"line":25,"column":41}},"11":{"start":{"line":26,"column":2},"end":{"line":26,"column":39}},"12":{"start":{"line":27,"column":2},"end":{"line":27,"column":45}},"13":{"start":{"line":28,"column":2},"end":{"line":84,"column":3}},"14":{"start":{"line":29,"column":4},"end":{"line":83,"column":5}},"15":{"start":{"line":30,"column":6},"end":{"line":30,"column":54}},"16":{"start":{"line":32,"column":9},"end":{"line":83,"column":5}},"17":{"start":{"line":33,"column":6},"end":{"line":33,"column":50}},"18":{"start":{"line":35,"column":9},"end":{"line":83,"column":5}},"19":{"start":{"line":36,"column":6},"end":{"line":36,"column":51}},"20":{"start":{"line":38,"column":9},"end":{"line":83,"column":5}},"21":{"start":{"line":39,"column":6},"end":{"line":39,"column":47}},"22":{"start":{"line":41,"column":9},"end":{"line":83,"column":5}},"23":{"start":{"line":42,"column":6},"end":{"line":42,"column":54}},"24":{"start":{"line":43,"column":6},"end":{"line":43,"column":51}},"25":{"start":{"line":45,"column":9},"end":{"line":83,"column":5}},"26":{"start":{"line":46,"column":6},"end":{"line":46,"column":50}},"27":{"start":{"line":47,"column":6},"end":{"line":47,"column":47}},"28":{"start":{"line":49,"column":9},"end":{"line":83,"column":5}},"29":{"start":{"line":50,"column":6},"end":{"line":53,"column":8}},"30":{"start":{"line":54,"column":6},"end":{"line":54,"column":54}},"31":{"start":{"line":55,"column":6},"end":{"line":55,"column":47}},"32":{"start":{"line":57,"column":9},"end":{"line":83,"column":5}},"33":{"start":{"line":58,"column":6},"end":{"line":61,"column":8}},"34":{"start":{"line":62,"column":6},"end":{"line":62,"column":50}},"35":{"start":{"line":63,"column":6},"end":{"line":63,"column":51}},"36":{"start":{"line":66,"column":6},"end":{"line":66,"column":56}},"37":{"start":{"line":67,"column":6},"end":{"line":82,"column":7}},"38":{"start":{"line":68,"column":8},"end":{"line":71,"column":10}},"39":{"start":{"line":72,"column":8},"end":{"line":72,"column":53}},"40":{"start":{"line":75,"column":8},"end":{"line":75,"column":37}},"41":{"start":{"line":76,"column":8},"end":{"line":76,"column":35}},"42":{"start":{"line":77,"column":8},"end":{"line":80,"column":10}},"43":{"start":{"line":81,"column":8},"end":{"line":81,"column":53}},"44":{"start":{"line":85,"column":2},"end":{"line":104,"column":3}},"45":{"start":{"line":86,"column":4},"end":{"line":86,"column":43}},"46":{"start":{"line":87,"column":4},"end":{"line":87,"column":53}},"47":{"start":{"line":88,"column":4},"end":{"line":94,"column":5}},"48":{"start":{"line":89,"column":6},"end":{"line":89,"column":44}},"49":{"start":{"line":93,"column":6},"end":{"line":93,"column":65}},"50":{"start":{"line":93,"column":22},"end":{"line":93,"column":65}},"51":{"start":{"line":99,"column":7},"end":{"line":104,"column":3}},"52":{"start":{"line":100,"column":4},"end":{"line":103,"column":5}},"53":{"start":{"line":101,"column":6},"end":{"line":101,"column":46}},"54":{"start":{"line":102,"column":6},"end":{"line":102,"column":58}},"55":{"start":{"line":102,"column":22},"end":{"line":102,"column":58}},"56":{"start":{"line":105,"column":2},"end":{"line":105,"column":21}},"57":{"start":{"line":108,"column":0},"end":{"line":108,"column":78}}},"branchMap":{"1":{"line":19,"type":"binary-expr","locations":[{"start":{"line":19,"column":14},"end":{"line":19,"column":21}},{"start":{"line":19,"column":25},"end":{"line":19,"column":33}}]},"2":{"line":20,"type":"cond-expr","locations":[{"start":{"line":20,"column":38},"end":{"line":20,"column":42}},{"start":{"line":20,"column":45},"end":{"line":20,"column":63}}]},"3":{"line":28,"type":"binary-expr","locations":[{"start":{"line":28,"column":9},"end":{"line":28,"column":35}},{"start":{"line":28,"column":39},"end":{"line":28,"column":63}}]},"4":{"line":29,"type":"if","locations":[{"start":{"line":29,"column":4},"end":{"line":29,"column":4}},{"start":{"line":29,"column":4},"end":{"line":29,"column":4}}]},"5":{"line":32,"type":"if","locations":[{"start":{"line":32,"column":9},"end":{"line":32,"column":9}},{"start":{"line":32,"column":9},"end":{"line":32,"column":9}}]},"6":{"line":35,"type":"if","locations":[{"start":{"line":35,"column":9},"end":{"line":35,"column":9}},{"start":{"line":35,"column":9},"end":{"line":35,"column":9}}]},"7":{"line":38,"type":"if","locations":[{"start":{"line":38,"column":9},"end":{"line":38,"column":9}},{"start":{"line":38,"column":9},"end":{"line":38,"column":9}}]},"8":{"line":41,"type":"if","locations":[{"start":{"line":41,"column":9},"end":{"line":41,"column":9}},{"start":{"line":41,"column":9},"end":{"line":41,"column":9}}]},"9":{"line":45,"type":"if","locations":[{"start":{"line":45,"column":9},"end":{"line":45,"column":9}},{"start":{"line":45,"column":9},"end":{"line":45,"column":9}}]},"10":{"line":49,"type":"if","locations":[{"start":{"line":49,"column":9},"end":{"line":49,"column":9}},{"start":{"line":49,"column":9},"end":{"line":49,"column":9}}]},"11":{"line":57,"type":"if","locations":[{"start":{"line":57,"column":9},"end":{"line":57,"column":9}},{"start":{"line":57,"column":9},"end":{"line":57,"column":9}}]},"12":{"line":67,"type":"if","locations":[{"start":{"line":67,"column":6},"end":{"line":67,"column":6}},{"start":{"line":67,"column":6},"end":{"line":67,"column":6}}]},"13":{"line":85,"type":"if","locations":[{"start":{"line":85,"column":2},"end":{"line":85,"column":2}},{"start":{"line":85,"column":2},"end":{"line":85,"column":2}}]},"14":{"line":87,"type":"cond-expr","locations":[{"start":{"line":87,"column":32},"end":{"line":87,"column":43}},{"start":{"line":87,"column":46},"end":{"line":87,"column":52}}]},"15":{"line":93,"type":"if","locations":[{"start":{"line":93,"column":6},"end":{"line":93,"column":6}},{"start":{"line":93,"column":6},"end":{"line":93,"column":6},"skip":true}]},"16":{"line":99,"type":"if","locations":[{"start":{"line":99,"column":7},"end":{"line":99,"column":7}},{"start":{"line":99,"column":7},"end":{"line":99,"column":7},"skip":true}]},"17":{"line":102,"type":"if","locations":[{"start":{"line":102,"column":6},"end":{"line":102,"column":6}},{"start":{"line":102,"column":6},"end":{"line":102,"column":6}}]}}}} \ No newline at end of file +{"/home/webreflection/code/domdiff/cjs/index.js":{"path":"/home/webreflection/code/domdiff/cjs/index.js","s":{"1":1,"2":528,"3":1,"4":98,"5":98,"6":98,"7":98,"8":98,"9":98,"10":98,"11":98,"12":98,"13":98,"14":447,"15":44,"16":403,"17":11,"18":392,"19":22,"20":370,"21":5,"22":365,"23":140,"24":140,"25":225,"26":50,"27":50,"28":175,"29":52,"30":52,"31":52,"32":123,"33":27,"34":27,"35":27,"36":96,"37":96,"38":52,"39":52,"40":44,"41":44,"42":44,"43":44,"44":98,"45":52,"46":31,"47":31,"48":31,"49":0,"50":31,"51":0,"52":31,"53":15,"54":16,"55":16,"56":16,"57":48,"58":48,"59":48,"60":16,"61":46,"62":46,"63":2,"64":46,"65":0,"66":46,"67":23,"68":23,"69":23,"70":23,"71":23,"72":23,"73":98,"74":1},"b":{"1":[98,96],"2":[50,48],"3":[545,493],"4":[44,403],"5":[11,392],"6":[22,370],"7":[5,365],"8":[140,225],"9":[50,175],"10":[52,123],"11":[27,96],"12":[52,44],"13":[52,46],"14":[31,21],"15":[22,9],"16":[15,16],"17":[31,15],"18":[16,0],"19":[48,0],"20":[46,0],"21":[46,46],"22":[23,23],"23":[46,23],"24":[23,0]},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":10,"column":0},"end":{"line":10,"column":24}},"2":{"start":{"line":10,"column":22},"end":{"line":10,"column":23}},"3":{"start":{"line":12,"column":0},"end":{"line":130,"column":2}},"4":{"start":{"line":19,"column":2},"end":{"line":19,"column":34}},"5":{"start":{"line":20,"column":2},"end":{"line":20,"column":64}},"6":{"start":{"line":21,"column":2},"end":{"line":21,"column":40}},"7":{"start":{"line":22,"column":2},"end":{"line":22,"column":43}},"8":{"start":{"line":23,"column":2},"end":{"line":23,"column":41}},"9":{"start":{"line":24,"column":2},"end":{"line":24,"column":48}},"10":{"start":{"line":25,"column":2},"end":{"line":25,"column":41}},"11":{"start":{"line":26,"column":2},"end":{"line":26,"column":39}},"12":{"start":{"line":27,"column":2},"end":{"line":27,"column":45}},"13":{"start":{"line":28,"column":2},"end":{"line":84,"column":3}},"14":{"start":{"line":29,"column":4},"end":{"line":83,"column":5}},"15":{"start":{"line":30,"column":6},"end":{"line":30,"column":54}},"16":{"start":{"line":32,"column":9},"end":{"line":83,"column":5}},"17":{"start":{"line":33,"column":6},"end":{"line":33,"column":50}},"18":{"start":{"line":35,"column":9},"end":{"line":83,"column":5}},"19":{"start":{"line":36,"column":6},"end":{"line":36,"column":51}},"20":{"start":{"line":38,"column":9},"end":{"line":83,"column":5}},"21":{"start":{"line":39,"column":6},"end":{"line":39,"column":47}},"22":{"start":{"line":41,"column":9},"end":{"line":83,"column":5}},"23":{"start":{"line":42,"column":6},"end":{"line":42,"column":54}},"24":{"start":{"line":43,"column":6},"end":{"line":43,"column":51}},"25":{"start":{"line":45,"column":9},"end":{"line":83,"column":5}},"26":{"start":{"line":46,"column":6},"end":{"line":46,"column":50}},"27":{"start":{"line":47,"column":6},"end":{"line":47,"column":47}},"28":{"start":{"line":49,"column":9},"end":{"line":83,"column":5}},"29":{"start":{"line":50,"column":6},"end":{"line":53,"column":8}},"30":{"start":{"line":54,"column":6},"end":{"line":54,"column":54}},"31":{"start":{"line":55,"column":6},"end":{"line":55,"column":47}},"32":{"start":{"line":57,"column":9},"end":{"line":83,"column":5}},"33":{"start":{"line":58,"column":6},"end":{"line":61,"column":8}},"34":{"start":{"line":62,"column":6},"end":{"line":62,"column":50}},"35":{"start":{"line":63,"column":6},"end":{"line":63,"column":51}},"36":{"start":{"line":66,"column":6},"end":{"line":66,"column":56}},"37":{"start":{"line":67,"column":6},"end":{"line":82,"column":7}},"38":{"start":{"line":68,"column":8},"end":{"line":71,"column":10}},"39":{"start":{"line":72,"column":8},"end":{"line":72,"column":53}},"40":{"start":{"line":75,"column":8},"end":{"line":75,"column":37}},"41":{"start":{"line":76,"column":8},"end":{"line":76,"column":35}},"42":{"start":{"line":77,"column":8},"end":{"line":80,"column":10}},"43":{"start":{"line":81,"column":8},"end":{"line":81,"column":53}},"44":{"start":{"line":85,"column":2},"end":{"line":128,"column":3}},"45":{"start":{"line":86,"column":4},"end":{"line":108,"column":5}},"46":{"start":{"line":87,"column":6},"end":{"line":87,"column":45}},"47":{"start":{"line":88,"column":6},"end":{"line":88,"column":55}},"48":{"start":{"line":89,"column":6},"end":{"line":89,"column":61}},"49":{"start":{"line":89,"column":47},"end":{"line":89,"column":61}},"50":{"start":{"line":90,"column":6},"end":{"line":90,"column":57}},"51":{"start":{"line":90,"column":45},"end":{"line":90,"column":57}},"52":{"start":{"line":91,"column":6},"end":{"line":107,"column":7}},"53":{"start":{"line":92,"column":8},"end":{"line":92,"column":73}},"54":{"start":{"line":97,"column":11},"end":{"line":107,"column":7}},"55":{"start":{"line":98,"column":8},"end":{"line":98,"column":75}},"56":{"start":{"line":99,"column":8},"end":{"line":105,"column":9}},"57":{"start":{"line":100,"column":10},"end":{"line":100,"column":50}},"58":{"start":{"line":104,"column":10},"end":{"line":104,"column":63}},"59":{"start":{"line":104,"column":28},"end":{"line":104,"column":63}},"60":{"start":{"line":106,"column":8},"end":{"line":106,"column":49}},"61":{"start":{"line":113,"column":7},"end":{"line":128,"column":3}},"62":{"start":{"line":114,"column":4},"end":{"line":114,"column":62}},"63":{"start":{"line":114,"column":47},"end":{"line":114,"column":62}},"64":{"start":{"line":115,"column":4},"end":{"line":115,"column":58}},"65":{"start":{"line":115,"column":45},"end":{"line":115,"column":58}},"66":{"start":{"line":116,"column":4},"end":{"line":127,"column":5}},"67":{"start":{"line":117,"column":6},"end":{"line":117,"column":66}},"68":{"start":{"line":122,"column":9},"end":{"line":127,"column":5}},"69":{"start":{"line":123,"column":6},"end":{"line":123,"column":59}},"70":{"start":{"line":124,"column":6},"end":{"line":124,"column":64}},"71":{"start":{"line":125,"column":6},"end":{"line":125,"column":59}},"72":{"start":{"line":126,"column":6},"end":{"line":126,"column":29}},"73":{"start":{"line":129,"column":2},"end":{"line":129,"column":21}},"74":{"start":{"line":132,"column":0},"end":{"line":132,"column":78}}},"branchMap":{"1":{"line":19,"type":"binary-expr","locations":[{"start":{"line":19,"column":14},"end":{"line":19,"column":21}},{"start":{"line":19,"column":25},"end":{"line":19,"column":33}}]},"2":{"line":20,"type":"cond-expr","locations":[{"start":{"line":20,"column":38},"end":{"line":20,"column":42}},{"start":{"line":20,"column":45},"end":{"line":20,"column":63}}]},"3":{"line":28,"type":"binary-expr","locations":[{"start":{"line":28,"column":9},"end":{"line":28,"column":35}},{"start":{"line":28,"column":39},"end":{"line":28,"column":63}}]},"4":{"line":29,"type":"if","locations":[{"start":{"line":29,"column":4},"end":{"line":29,"column":4}},{"start":{"line":29,"column":4},"end":{"line":29,"column":4}}]},"5":{"line":32,"type":"if","locations":[{"start":{"line":32,"column":9},"end":{"line":32,"column":9}},{"start":{"line":32,"column":9},"end":{"line":32,"column":9}}]},"6":{"line":35,"type":"if","locations":[{"start":{"line":35,"column":9},"end":{"line":35,"column":9}},{"start":{"line":35,"column":9},"end":{"line":35,"column":9}}]},"7":{"line":38,"type":"if","locations":[{"start":{"line":38,"column":9},"end":{"line":38,"column":9}},{"start":{"line":38,"column":9},"end":{"line":38,"column":9}}]},"8":{"line":41,"type":"if","locations":[{"start":{"line":41,"column":9},"end":{"line":41,"column":9}},{"start":{"line":41,"column":9},"end":{"line":41,"column":9}}]},"9":{"line":45,"type":"if","locations":[{"start":{"line":45,"column":9},"end":{"line":45,"column":9}},{"start":{"line":45,"column":9},"end":{"line":45,"column":9}}]},"10":{"line":49,"type":"if","locations":[{"start":{"line":49,"column":9},"end":{"line":49,"column":9}},{"start":{"line":49,"column":9},"end":{"line":49,"column":9}}]},"11":{"line":57,"type":"if","locations":[{"start":{"line":57,"column":9},"end":{"line":57,"column":9}},{"start":{"line":57,"column":9},"end":{"line":57,"column":9}}]},"12":{"line":67,"type":"if","locations":[{"start":{"line":67,"column":6},"end":{"line":67,"column":6}},{"start":{"line":67,"column":6},"end":{"line":67,"column":6}}]},"13":{"line":85,"type":"if","locations":[{"start":{"line":85,"column":2},"end":{"line":85,"column":2}},{"start":{"line":85,"column":2},"end":{"line":85,"column":2}}]},"14":{"line":86,"type":"if","locations":[{"start":{"line":86,"column":4},"end":{"line":86,"column":4}},{"start":{"line":86,"column":4},"end":{"line":86,"column":4}}]},"15":{"line":88,"type":"cond-expr","locations":[{"start":{"line":88,"column":34},"end":{"line":88,"column":40}},{"start":{"line":88,"column":43},"end":{"line":88,"column":54}}]},"16":{"line":91,"type":"if","locations":[{"start":{"line":91,"column":6},"end":{"line":91,"column":6}},{"start":{"line":91,"column":6},"end":{"line":91,"column":6}}]},"17":{"line":91,"type":"binary-expr","locations":[{"start":{"line":91,"column":10},"end":{"line":91,"column":35}},{"start":{"line":91,"column":39},"end":{"line":91,"column":71}}]},"18":{"line":97,"type":"if","locations":[{"start":{"line":97,"column":11},"end":{"line":97,"column":11}},{"start":{"line":97,"column":11},"end":{"line":97,"column":11},"skip":true}]},"19":{"line":104,"type":"if","locations":[{"start":{"line":104,"column":10},"end":{"line":104,"column":10}},{"start":{"line":104,"column":10},"end":{"line":104,"column":10},"skip":true}]},"20":{"line":113,"type":"if","locations":[{"start":{"line":113,"column":7},"end":{"line":113,"column":7}},{"start":{"line":113,"column":7},"end":{"line":113,"column":7},"skip":true}]},"21":{"line":113,"type":"binary-expr","locations":[{"start":{"line":113,"column":11},"end":{"line":113,"column":34}},{"start":{"line":113,"column":38},"end":{"line":113,"column":64}}]},"22":{"line":116,"type":"if","locations":[{"start":{"line":116,"column":4},"end":{"line":116,"column":4}},{"start":{"line":116,"column":4},"end":{"line":116,"column":4}}]},"23":{"line":116,"type":"binary-expr","locations":[{"start":{"line":116,"column":8},"end":{"line":116,"column":35}},{"start":{"line":116,"column":39},"end":{"line":116,"column":73}}]},"24":{"line":122,"type":"if","locations":[{"start":{"line":122,"column":9},"end":{"line":122,"column":9}},{"start":{"line":122,"column":9},"end":{"line":122,"column":9},"skip":true}]}}}} \ No newline at end of file diff --git a/coverage/lcov-report/cjs/index.html b/coverage/lcov-report/cjs/index.html index fd49e3d..02b2376 100644 --- a/coverage/lcov-report/cjs/index.html +++ b/coverage/lcov-report/cjs/index.html @@ -20,14 +20,14 @@

- 100% + 95.95% Statements - 57/57 + 71/74
100% Branches - 34/34 + 48/48
100% @@ -37,10 +37,10 @@

100% Lines - 54/54 + 68/68
- 2 branches + 4 branches Ignored     

@@ -64,15 +64,15 @@

index.js -
- 100% - 57/57 +
+ 95.95% + 71/74 100% - 34/34 + 48/48 100% 0/0 100% - 54/54 + 68/68 @@ -81,7 +81,7 @@

diff --git a/coverage/lcov-report/cjs/index.js.html b/coverage/lcov-report/cjs/index.js.html index b5f6995..a08ac4f 100644 --- a/coverage/lcov-report/cjs/index.js.html +++ b/coverage/lcov-report/cjs/index.js.html @@ -20,14 +20,14 @@

- 100% + 95.95% Statements - 57/57 + 71/74
100% Branches - 34/34 + 48/48
100% @@ -37,10 +37,10 @@

100% Lines - 54/54 + 68/68
- 2 branches + 4 branches Ignored     

@@ -155,7 +155,31 @@

106 107 108 -109  +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133        @@ -164,7 +188,7 @@

      -569× +528×     @@ -241,22 +265,46 @@

  98× 52× -52× -52× -63× +31× +31× +31× +31× +31× +15× +  +      +16× +16× +16× +48×   -63×     +48×   +16×     +  +  +  +  +46× 46× 46× -116× -116× +46× +23× +  +  +  +  +23× +23× +23× +23× +23×     98× @@ -348,23 +396,47 @@

} } if (currentStart > currentEnd) { - const pin = futureNodes[futureEnd + 1]; - const place = pin != null ? get(pin, 0) : before; - while (futureStart <= futureEnd) { - const ch = futureNodes[futureStart++]; + if (futureStart <= futureEnd) { + const pin = futureNodes[futureEnd + 1]; + const place = pin == null ? before : get(pin, 0); + while (futureNodes[futureStart] == null) futureStart++; + while (futureNodes[futureEnd] == null) futureEnd--; + if (futureStart === futureEnd && futureNodes[futureStart] != null) { + parentNode.insertBefore(get(futureNodes[futureStart], 1), place); + } // ignore until I am sure the else could never happen. // it might be a vDOM thing 'cause it never happens here. /* istanbul ignore else */ - Eif (ch != null) parentNode.insertBefore(get(ch, 1), place); + else Eif (futureStart < futureEnd) { + const fragment = parentNode.ownerDocument.createDocumentFragment(); + while (futureStart <= futureEnd) { + const node = futureNodes[futureStart++]; + // ignore until I am sure the else could never happen. + // it might be a vDOM thing 'cause it never happens here. + /* istanbul ignore else */ + Eif (node != null) fragment.appendChild(get(node, 1)); + } + parentNode.insertBefore(fragment, place); + } } } // ignore until I am sure the else could never happen. // it might be a vDOM thing 'cause it never happens here. /* istanbul ignore else */ - else Eif (futureStart > futureEnd) { - while (currentStart <= currentEnd) { - const ch = currentNodes[currentStart++]; - if (ch != null) parentNode.removeChild(get(ch, -1)); + else Eif (futureStart > futureEnd && currentStart <= currentEnd) { + while (currentNodes[currentStart] == null) currentStart++; + while (currentNodes[currentEnd] == null) currentEnd--; + if (currentStart === currentEnd && currentNodes[currentStart] != null) { + parentNode.removeChild(get(currentNodes[currentStart], -1)); + } + // ignore until I am sure the else could never happen. + // it might be a vDOM thing 'cause it never happens here. + /* istanbul ignore else */ + else Eif (currentStart < currentEnd) { + const range = parentNode.ownerDocument.createRange(); + range.setStartBefore(get(currentNodes[currentStart], -1)); + range.setEndAfter(get(currentNodes[currentEnd], -1)); + range.deleteContents(); } } return futureNodes; @@ -377,7 +449,7 @@

diff --git a/coverage/lcov-report/index.html b/coverage/lcov-report/index.html index b5d15fc..4c15547 100644 --- a/coverage/lcov-report/index.html +++ b/coverage/lcov-report/index.html @@ -20,14 +20,14 @@

- 100% + 95.95% Statements - 57/57 + 71/74
100% Branches - 34/34 + 48/48
100% @@ -37,10 +37,10 @@

100% Lines - 54/54 + 68/68
- 2 branches + 4 branches Ignored     

@@ -64,15 +64,15 @@

cjs/ -
- 100% - 57/57 +
+ 95.95% + 71/74 100% - 34/34 + 48/48 100% 0/0 100% - 54/54 + 68/68 @@ -81,7 +81,7 @@

diff --git a/coverage/lcov.info b/coverage/lcov.info index 5e48c6e..518e89d 100644 --- a/coverage/lcov.info +++ b/coverage/lcov.info @@ -2,7 +2,7 @@ TN: SF:/home/webreflection/code/domdiff/cjs/index.js FNF:0 FNH:0 -DA:10,569 +DA:10,528 DA:12,1 DA:19,98 DA:20,98 @@ -46,18 +46,32 @@ DA:77,44 DA:81,44 DA:85,98 DA:86,52 -DA:87,52 -DA:88,52 -DA:89,63 -DA:93,63 -DA:99,46 -DA:100,46 -DA:101,116 -DA:102,116 -DA:105,98 -DA:108,1 -LF:54 -LH:54 +DA:87,31 +DA:88,31 +DA:89,31 +DA:90,31 +DA:91,31 +DA:92,15 +DA:97,16 +DA:98,16 +DA:99,16 +DA:100,48 +DA:104,48 +DA:106,16 +DA:113,46 +DA:114,46 +DA:115,46 +DA:116,46 +DA:117,23 +DA:122,23 +DA:123,23 +DA:124,23 +DA:125,23 +DA:126,23 +DA:129,98 +DA:132,1 +LF:68 +LH:68 BRDA:19,1,0,98 BRDA:19,1,1,96 BRDA:20,2,0,50 @@ -84,14 +98,28 @@ BRDA:67,12,0,52 BRDA:67,12,1,44 BRDA:85,13,0,52 BRDA:85,13,1,46 -BRDA:87,14,0,25 -BRDA:87,14,1,27 -BRDA:93,15,0,63 -BRDA:93,15,1,0 -BRDA:99,16,0,46 -BRDA:99,16,1,0 -BRDA:102,17,0,100 -BRDA:102,17,1,16 -BRF:34 -BRH:34 +BRDA:86,14,0,31 +BRDA:86,14,1,21 +BRDA:88,15,0,22 +BRDA:88,15,1,9 +BRDA:91,16,0,15 +BRDA:91,16,1,16 +BRDA:91,17,0,31 +BRDA:91,17,1,15 +BRDA:97,18,0,16 +BRDA:97,18,1,0 +BRDA:104,19,0,48 +BRDA:104,19,1,0 +BRDA:113,20,0,46 +BRDA:113,20,1,0 +BRDA:113,21,0,46 +BRDA:113,21,1,46 +BRDA:116,22,0,23 +BRDA:116,22,1,23 +BRDA:116,23,0,46 +BRDA:116,23,1,23 +BRDA:122,24,0,23 +BRDA:122,24,1,0 +BRF:48 +BRH:48 end_of_record diff --git a/esm/index.js b/esm/index.js index f4d2977..14521e6 100644 --- a/esm/index.js +++ b/esm/index.js @@ -82,23 +82,47 @@ const domdiff = ( } } if (currentStart > currentEnd) { - const pin = futureNodes[futureEnd + 1]; - const place = pin != null ? get(pin, 0) : before; - while (futureStart <= futureEnd) { - const ch = futureNodes[futureStart++]; + if (futureStart <= futureEnd) { + const pin = futureNodes[futureEnd + 1]; + const place = pin == null ? before : get(pin, 0); + while (futureNodes[futureStart] == null) futureStart++; + while (futureNodes[futureEnd] == null) futureEnd--; + if (futureStart === futureEnd && futureNodes[futureStart] != null) { + parentNode.insertBefore(get(futureNodes[futureStart], 1), place); + } // ignore until I am sure the else could never happen. // it might be a vDOM thing 'cause it never happens here. /* istanbul ignore else */ - if (ch != null) parentNode.insertBefore(get(ch, 1), place); + else if (futureStart < futureEnd) { + const fragment = parentNode.ownerDocument.createDocumentFragment(); + while (futureStart <= futureEnd) { + const node = futureNodes[futureStart++]; + // ignore until I am sure the else could never happen. + // it might be a vDOM thing 'cause it never happens here. + /* istanbul ignore else */ + if (node != null) fragment.appendChild(get(node, 1)); + } + parentNode.insertBefore(fragment, place); + } } } // ignore until I am sure the else could never happen. // it might be a vDOM thing 'cause it never happens here. /* istanbul ignore else */ - else if (futureStart > futureEnd) { - while (currentStart <= currentEnd) { - const ch = currentNodes[currentStart++]; - if (ch != null) parentNode.removeChild(get(ch, -1)); + else if (futureStart > futureEnd && currentStart <= currentEnd) { + while (currentNodes[currentStart] == null) currentStart++; + while (currentNodes[currentEnd] == null) currentEnd--; + if (currentStart === currentEnd && currentNodes[currentStart] != null) { + parentNode.removeChild(get(currentNodes[currentStart], -1)); + } + // ignore until I am sure the else could never happen. + // it might be a vDOM thing 'cause it never happens here. + /* istanbul ignore else */ + else if (currentStart < currentEnd) { + const range = parentNode.ownerDocument.createRange(); + range.setStartBefore(get(currentNodes[currentStart], -1)); + range.setEndAfter(get(currentNodes[currentEnd], -1)); + range.deleteContents(); } } return futureNodes; diff --git a/index.js b/index.js index 076738e..5717f3e 100644 --- a/index.js +++ b/index.js @@ -66,24 +66,52 @@ beforeNode // optional item/node to use as insertBefore delimiter } } if (currentStart > currentEnd) { - var pin = futureNodes[futureEnd + 1]; - var place = pin != null ? get(pin, 0) : before; - while (futureStart <= futureEnd) { - var ch = futureNodes[futureStart++]; + if (futureStart <= futureEnd) { + var pin = futureNodes[futureEnd + 1]; + var place = pin == null ? before : get(pin, 0); + while (futureNodes[futureStart] == null) { + futureStart++; + }while (futureNodes[futureEnd] == null) { + futureEnd--; + }if (futureStart === futureEnd && futureNodes[futureStart] != null) { + parentNode.insertBefore(get(futureNodes[futureStart], 1), place); + } // ignore until I am sure the else could never happen. // it might be a vDOM thing 'cause it never happens here. /* istanbul ignore else */ - if (ch != null) parentNode.insertBefore(get(ch, 1), place); + else if (futureStart < futureEnd) { + var fragment = parentNode.ownerDocument.createDocumentFragment(); + while (futureStart <= futureEnd) { + var node = futureNodes[futureStart++]; + // ignore until I am sure the else could never happen. + // it might be a vDOM thing 'cause it never happens here. + /* istanbul ignore else */ + if (node != null) fragment.appendChild(get(node, 1)); + } + parentNode.insertBefore(fragment, place); + } } } // ignore until I am sure the else could never happen. // it might be a vDOM thing 'cause it never happens here. /* istanbul ignore else */ - else if (futureStart > futureEnd) { - while (currentStart <= currentEnd) { - var _ch = currentNodes[currentStart++]; - if (_ch != null) parentNode.removeChild(get(_ch, -1)); + else if (futureStart > futureEnd && currentStart <= currentEnd) { + while (currentNodes[currentStart] == null) { + currentStart++; + }while (currentNodes[currentEnd] == null) { + currentEnd--; + }if (currentStart === currentEnd && currentNodes[currentStart] != null) { + parentNode.removeChild(get(currentNodes[currentStart], -1)); } + // ignore until I am sure the else could never happen. + // it might be a vDOM thing 'cause it never happens here. + /* istanbul ignore else */ + else if (currentStart < currentEnd) { + var range = parentNode.ownerDocument.createRange(); + range.setStartBefore(get(currentNodes[currentStart], -1)); + range.setEndAfter(get(currentNodes[currentEnd], -1)); + range.deleteContents(); + } } return futureNodes; }; diff --git a/min.js b/min.js index a9992de..d71a2da 100644 --- a/min.js +++ b/min.js @@ -1,2 +1,2 @@ var domdiff=function(){"use strict";/*! (c) 2017 Andrea Giammarchi (ISC) */ -var e=function(e){return e};return function(l,n,r,f,i){for(var s=f||e,u=null==i?null:s(i,0),t=0,o=0,v=n.length-1,a=n[0],B=n[v],c=r.length-1,d=r[0],g=r[c];t<=v&&o<=c;)if(null==a)a=n[++t];else if(null==B)B=n[--v];else if(null==d)d=r[++o];else if(null==g)g=r[--c];else if(a==d)a=n[++t],d=r[++o];else if(B==g)B=n[--v],g=r[--c];else if(a==g)l.insertBefore(s(a,1),s(B,-0).nextSibling),a=n[++t],g=r[--c];else if(B==d)l.insertBefore(s(B,1),s(a,0)),B=n[--v],d=r[++o];else{var h=n.indexOf(d);if(h<0)l.insertBefore(s(d,1),s(a,0)),d=r[++o];else{var m=n[h];n[h]=null,l.insertBefore(s(m,1),s(a,0)),d=r[++o]}}if(t>v)for(var x=r[c+1],b=null!=x?s(x,0):u;o<=c;){var C=r[o++];null!=C&&l.insertBefore(s(C,1),b)}else if(o>c)for(;t<=v;){var O=n[t++];null!=O&&l.removeChild(s(O,-1))}return r}}(); \ No newline at end of file +var e=function(e){return e};return function(l,n,r,f,i){for(var t=f||e,u=null==i?null:t(i,0),o=0,s=0,a=n.length-1,v=n[0],c=n[a],d=r.length-1,B=r[0],m=r[d];o<=a&&s<=d;)if(null==v)v=n[++o];else if(null==c)c=n[--a];else if(null==B)B=r[++s];else if(null==m)m=r[--d];else if(v==B)v=n[++o],B=r[++s];else if(c==m)c=n[--a],m=r[--d];else if(v==m)l.insertBefore(t(v,1),t(c,-0).nextSibling),v=n[++o],m=r[--d];else if(c==B)l.insertBefore(t(c,1),t(v,0)),c=n[--a],B=r[++s];else{var g=n.indexOf(B);if(g<0)l.insertBefore(t(B,1),t(v,0)),B=r[++s];else{var h=n[g];n[g]=null,l.insertBefore(t(h,1),t(v,0)),B=r[++s]}}if(o>a){if(s<=d){for(var C=r[d+1],D=null==C?u:t(C,0);null==r[s];)s++;for(;null==r[d];)d--;if(s===d&&null!=r[s])l.insertBefore(t(r[s],1),D);else if(sd&&o<=a){for(;null==n[o];)o++;for(;null==n[a];)a--;if(o===a&&null!=n[o])l.removeChild(t(n[o],-1));else if(o Date: Wed, 6 Dec 2017 11:45:51 -0200 Subject: [PATCH 11/71] 0.3.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 498fe72..121256d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "domdiff", - "version": "0.2.0", + "version": "0.3.0", "description": "A fast and simple way to diff childNodes", "browser": "min.js", "main": "cjs/index.js", From 9c710a46a2f3fce424dbe3d367d7a09839a41f86 Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Wed, 6 Dec 2017 13:08:52 -0200 Subject: [PATCH 12/71] toward 100% code coverage --- cjs/index.js | 40 ++---- coverage/coverage.json | 2 +- coverage/lcov-report/cjs/index.html | 24 ++-- coverage/lcov-report/cjs/index.js.html | 90 ++++-------- coverage/lcov-report/index.html | 24 ++-- coverage/lcov.info | 189 ++++++++++++------------- esm/index.js | 40 ++---- index.js | 68 ++++----- min.js | 2 +- test/diff.html | 104 ++++++++++++++ 10 files changed, 294 insertions(+), 289 deletions(-) create mode 100644 test/diff.html diff --git a/cjs/index.js b/cjs/index.js index fc52de5..b0d8319 100644 --- a/cjs/index.js +++ b/cjs/index.js @@ -20,6 +20,7 @@ const domdiff = ( const before = beforeNode == null ? null : get(beforeNode, 0); let currentStart = 0, futureStart = 0; let currentEnd = currentNodes.length - 1; + let currentStartNodeZ = null; let currentStartNode = currentNodes[0]; let currentEndNode = currentNodes[currentEnd]; let futureEnd = futureNodes.length - 1; @@ -27,6 +28,7 @@ const domdiff = ( let futureEndNode = futureNodes[futureEnd]; while (currentStart <= currentEnd && futureStart <= futureEnd) { if (currentStartNode == null) { + currentStartNodeZ = null; currentStartNode = currentNodes[++currentStart]; } else if (currentEndNode == null) { @@ -39,6 +41,7 @@ const domdiff = ( futureEndNode = futureNodes[--futureEnd]; } else if (currentStartNode == futureStartNode) { + currentStartNodeZ = null; currentStartNode = currentNodes[++currentStart]; futureStartNode = futureNodes[++futureStart]; } @@ -51,13 +54,14 @@ const domdiff = ( get(currentStartNode, 1), get(currentEndNode, -0).nextSibling ); + currentStartNodeZ = null; currentStartNode = currentNodes[++currentStart]; futureEndNode = futureNodes[--futureEnd]; } else if (currentEndNode == futureStartNode) { parentNode.insertBefore( get(currentEndNode, 1), - get(currentStartNode, 0) + currentStartNodeZ || (currentStartNodeZ = get(currentStartNode, 0)) ); currentEndNode = currentNodes[--currentEnd]; futureStartNode = futureNodes[++futureStart]; @@ -67,7 +71,7 @@ const domdiff = ( if (index < 0) { parentNode.insertBefore( get(futureStartNode, 1), - get(currentStartNode, 0) + currentStartNodeZ || (currentStartNodeZ = get(currentStartNode, 0)) ); futureStartNode = futureNodes[++futureStart]; } @@ -76,7 +80,7 @@ const domdiff = ( currentNodes[index] = null; parentNode.insertBefore( get(el, 1), - get(currentStartNode, 0) + currentStartNodeZ || (currentStartNodeZ = get(currentStartNode, 0)) ); futureStartNode = futureNodes[++futureStart]; } @@ -86,40 +90,24 @@ const domdiff = ( if (futureStart <= futureEnd) { const pin = futureNodes[futureEnd + 1]; const place = pin == null ? before : get(pin, 0); - while (futureNodes[futureStart] == null) futureStart++; - while (futureNodes[futureEnd] == null) futureEnd--; - if (futureStart === futureEnd && futureNodes[futureStart] != null) { + if (futureStart === futureEnd) { parentNode.insertBefore(get(futureNodes[futureStart], 1), place); } - // ignore until I am sure the else could never happen. - // it might be a vDOM thing 'cause it never happens here. - /* istanbul ignore else */ - else if (futureStart < futureEnd) { + else { const fragment = parentNode.ownerDocument.createDocumentFragment(); while (futureStart <= futureEnd) { - const node = futureNodes[futureStart++]; - // ignore until I am sure the else could never happen. - // it might be a vDOM thing 'cause it never happens here. - /* istanbul ignore else */ - if (node != null) fragment.appendChild(get(node, 1)); + fragment.appendChild(get(futureNodes[futureStart++], 1)); } parentNode.insertBefore(fragment, place); } } } - // ignore until I am sure the else could never happen. - // it might be a vDOM thing 'cause it never happens here. - /* istanbul ignore else */ - else if (futureStart > futureEnd && currentStart <= currentEnd) { - while (currentNodes[currentStart] == null) currentStart++; - while (currentNodes[currentEnd] == null) currentEnd--; - if (currentStart === currentEnd && currentNodes[currentStart] != null) { + else { + while (currentStart <= currentEnd && currentNodes[currentStart] == null) currentStart++; + if (currentStart === currentEnd) { parentNode.removeChild(get(currentNodes[currentStart], -1)); } - // ignore until I am sure the else could never happen. - // it might be a vDOM thing 'cause it never happens here. - /* istanbul ignore else */ - else if (currentStart < currentEnd) { + else { const range = parentNode.ownerDocument.createRange(); range.setStartBefore(get(currentNodes[currentStart], -1)); range.setEndAfter(get(currentNodes[currentEnd], -1)); diff --git a/coverage/coverage.json b/coverage/coverage.json index 3bb7033..c83359c 100644 --- a/coverage/coverage.json +++ b/coverage/coverage.json @@ -1 +1 @@ -{"/home/webreflection/code/domdiff/cjs/index.js":{"path":"/home/webreflection/code/domdiff/cjs/index.js","s":{"1":1,"2":528,"3":1,"4":98,"5":98,"6":98,"7":98,"8":98,"9":98,"10":98,"11":98,"12":98,"13":98,"14":447,"15":44,"16":403,"17":11,"18":392,"19":22,"20":370,"21":5,"22":365,"23":140,"24":140,"25":225,"26":50,"27":50,"28":175,"29":52,"30":52,"31":52,"32":123,"33":27,"34":27,"35":27,"36":96,"37":96,"38":52,"39":52,"40":44,"41":44,"42":44,"43":44,"44":98,"45":52,"46":31,"47":31,"48":31,"49":0,"50":31,"51":0,"52":31,"53":15,"54":16,"55":16,"56":16,"57":48,"58":48,"59":48,"60":16,"61":46,"62":46,"63":2,"64":46,"65":0,"66":46,"67":23,"68":23,"69":23,"70":23,"71":23,"72":23,"73":98,"74":1},"b":{"1":[98,96],"2":[50,48],"3":[545,493],"4":[44,403],"5":[11,392],"6":[22,370],"7":[5,365],"8":[140,225],"9":[50,175],"10":[52,123],"11":[27,96],"12":[52,44],"13":[52,46],"14":[31,21],"15":[22,9],"16":[15,16],"17":[31,15],"18":[16,0],"19":[48,0],"20":[46,0],"21":[46,46],"22":[23,23],"23":[46,23],"24":[23,0]},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":10,"column":0},"end":{"line":10,"column":24}},"2":{"start":{"line":10,"column":22},"end":{"line":10,"column":23}},"3":{"start":{"line":12,"column":0},"end":{"line":130,"column":2}},"4":{"start":{"line":19,"column":2},"end":{"line":19,"column":34}},"5":{"start":{"line":20,"column":2},"end":{"line":20,"column":64}},"6":{"start":{"line":21,"column":2},"end":{"line":21,"column":40}},"7":{"start":{"line":22,"column":2},"end":{"line":22,"column":43}},"8":{"start":{"line":23,"column":2},"end":{"line":23,"column":41}},"9":{"start":{"line":24,"column":2},"end":{"line":24,"column":48}},"10":{"start":{"line":25,"column":2},"end":{"line":25,"column":41}},"11":{"start":{"line":26,"column":2},"end":{"line":26,"column":39}},"12":{"start":{"line":27,"column":2},"end":{"line":27,"column":45}},"13":{"start":{"line":28,"column":2},"end":{"line":84,"column":3}},"14":{"start":{"line":29,"column":4},"end":{"line":83,"column":5}},"15":{"start":{"line":30,"column":6},"end":{"line":30,"column":54}},"16":{"start":{"line":32,"column":9},"end":{"line":83,"column":5}},"17":{"start":{"line":33,"column":6},"end":{"line":33,"column":50}},"18":{"start":{"line":35,"column":9},"end":{"line":83,"column":5}},"19":{"start":{"line":36,"column":6},"end":{"line":36,"column":51}},"20":{"start":{"line":38,"column":9},"end":{"line":83,"column":5}},"21":{"start":{"line":39,"column":6},"end":{"line":39,"column":47}},"22":{"start":{"line":41,"column":9},"end":{"line":83,"column":5}},"23":{"start":{"line":42,"column":6},"end":{"line":42,"column":54}},"24":{"start":{"line":43,"column":6},"end":{"line":43,"column":51}},"25":{"start":{"line":45,"column":9},"end":{"line":83,"column":5}},"26":{"start":{"line":46,"column":6},"end":{"line":46,"column":50}},"27":{"start":{"line":47,"column":6},"end":{"line":47,"column":47}},"28":{"start":{"line":49,"column":9},"end":{"line":83,"column":5}},"29":{"start":{"line":50,"column":6},"end":{"line":53,"column":8}},"30":{"start":{"line":54,"column":6},"end":{"line":54,"column":54}},"31":{"start":{"line":55,"column":6},"end":{"line":55,"column":47}},"32":{"start":{"line":57,"column":9},"end":{"line":83,"column":5}},"33":{"start":{"line":58,"column":6},"end":{"line":61,"column":8}},"34":{"start":{"line":62,"column":6},"end":{"line":62,"column":50}},"35":{"start":{"line":63,"column":6},"end":{"line":63,"column":51}},"36":{"start":{"line":66,"column":6},"end":{"line":66,"column":56}},"37":{"start":{"line":67,"column":6},"end":{"line":82,"column":7}},"38":{"start":{"line":68,"column":8},"end":{"line":71,"column":10}},"39":{"start":{"line":72,"column":8},"end":{"line":72,"column":53}},"40":{"start":{"line":75,"column":8},"end":{"line":75,"column":37}},"41":{"start":{"line":76,"column":8},"end":{"line":76,"column":35}},"42":{"start":{"line":77,"column":8},"end":{"line":80,"column":10}},"43":{"start":{"line":81,"column":8},"end":{"line":81,"column":53}},"44":{"start":{"line":85,"column":2},"end":{"line":128,"column":3}},"45":{"start":{"line":86,"column":4},"end":{"line":108,"column":5}},"46":{"start":{"line":87,"column":6},"end":{"line":87,"column":45}},"47":{"start":{"line":88,"column":6},"end":{"line":88,"column":55}},"48":{"start":{"line":89,"column":6},"end":{"line":89,"column":61}},"49":{"start":{"line":89,"column":47},"end":{"line":89,"column":61}},"50":{"start":{"line":90,"column":6},"end":{"line":90,"column":57}},"51":{"start":{"line":90,"column":45},"end":{"line":90,"column":57}},"52":{"start":{"line":91,"column":6},"end":{"line":107,"column":7}},"53":{"start":{"line":92,"column":8},"end":{"line":92,"column":73}},"54":{"start":{"line":97,"column":11},"end":{"line":107,"column":7}},"55":{"start":{"line":98,"column":8},"end":{"line":98,"column":75}},"56":{"start":{"line":99,"column":8},"end":{"line":105,"column":9}},"57":{"start":{"line":100,"column":10},"end":{"line":100,"column":50}},"58":{"start":{"line":104,"column":10},"end":{"line":104,"column":63}},"59":{"start":{"line":104,"column":28},"end":{"line":104,"column":63}},"60":{"start":{"line":106,"column":8},"end":{"line":106,"column":49}},"61":{"start":{"line":113,"column":7},"end":{"line":128,"column":3}},"62":{"start":{"line":114,"column":4},"end":{"line":114,"column":62}},"63":{"start":{"line":114,"column":47},"end":{"line":114,"column":62}},"64":{"start":{"line":115,"column":4},"end":{"line":115,"column":58}},"65":{"start":{"line":115,"column":45},"end":{"line":115,"column":58}},"66":{"start":{"line":116,"column":4},"end":{"line":127,"column":5}},"67":{"start":{"line":117,"column":6},"end":{"line":117,"column":66}},"68":{"start":{"line":122,"column":9},"end":{"line":127,"column":5}},"69":{"start":{"line":123,"column":6},"end":{"line":123,"column":59}},"70":{"start":{"line":124,"column":6},"end":{"line":124,"column":64}},"71":{"start":{"line":125,"column":6},"end":{"line":125,"column":59}},"72":{"start":{"line":126,"column":6},"end":{"line":126,"column":29}},"73":{"start":{"line":129,"column":2},"end":{"line":129,"column":21}},"74":{"start":{"line":132,"column":0},"end":{"line":132,"column":78}}},"branchMap":{"1":{"line":19,"type":"binary-expr","locations":[{"start":{"line":19,"column":14},"end":{"line":19,"column":21}},{"start":{"line":19,"column":25},"end":{"line":19,"column":33}}]},"2":{"line":20,"type":"cond-expr","locations":[{"start":{"line":20,"column":38},"end":{"line":20,"column":42}},{"start":{"line":20,"column":45},"end":{"line":20,"column":63}}]},"3":{"line":28,"type":"binary-expr","locations":[{"start":{"line":28,"column":9},"end":{"line":28,"column":35}},{"start":{"line":28,"column":39},"end":{"line":28,"column":63}}]},"4":{"line":29,"type":"if","locations":[{"start":{"line":29,"column":4},"end":{"line":29,"column":4}},{"start":{"line":29,"column":4},"end":{"line":29,"column":4}}]},"5":{"line":32,"type":"if","locations":[{"start":{"line":32,"column":9},"end":{"line":32,"column":9}},{"start":{"line":32,"column":9},"end":{"line":32,"column":9}}]},"6":{"line":35,"type":"if","locations":[{"start":{"line":35,"column":9},"end":{"line":35,"column":9}},{"start":{"line":35,"column":9},"end":{"line":35,"column":9}}]},"7":{"line":38,"type":"if","locations":[{"start":{"line":38,"column":9},"end":{"line":38,"column":9}},{"start":{"line":38,"column":9},"end":{"line":38,"column":9}}]},"8":{"line":41,"type":"if","locations":[{"start":{"line":41,"column":9},"end":{"line":41,"column":9}},{"start":{"line":41,"column":9},"end":{"line":41,"column":9}}]},"9":{"line":45,"type":"if","locations":[{"start":{"line":45,"column":9},"end":{"line":45,"column":9}},{"start":{"line":45,"column":9},"end":{"line":45,"column":9}}]},"10":{"line":49,"type":"if","locations":[{"start":{"line":49,"column":9},"end":{"line":49,"column":9}},{"start":{"line":49,"column":9},"end":{"line":49,"column":9}}]},"11":{"line":57,"type":"if","locations":[{"start":{"line":57,"column":9},"end":{"line":57,"column":9}},{"start":{"line":57,"column":9},"end":{"line":57,"column":9}}]},"12":{"line":67,"type":"if","locations":[{"start":{"line":67,"column":6},"end":{"line":67,"column":6}},{"start":{"line":67,"column":6},"end":{"line":67,"column":6}}]},"13":{"line":85,"type":"if","locations":[{"start":{"line":85,"column":2},"end":{"line":85,"column":2}},{"start":{"line":85,"column":2},"end":{"line":85,"column":2}}]},"14":{"line":86,"type":"if","locations":[{"start":{"line":86,"column":4},"end":{"line":86,"column":4}},{"start":{"line":86,"column":4},"end":{"line":86,"column":4}}]},"15":{"line":88,"type":"cond-expr","locations":[{"start":{"line":88,"column":34},"end":{"line":88,"column":40}},{"start":{"line":88,"column":43},"end":{"line":88,"column":54}}]},"16":{"line":91,"type":"if","locations":[{"start":{"line":91,"column":6},"end":{"line":91,"column":6}},{"start":{"line":91,"column":6},"end":{"line":91,"column":6}}]},"17":{"line":91,"type":"binary-expr","locations":[{"start":{"line":91,"column":10},"end":{"line":91,"column":35}},{"start":{"line":91,"column":39},"end":{"line":91,"column":71}}]},"18":{"line":97,"type":"if","locations":[{"start":{"line":97,"column":11},"end":{"line":97,"column":11}},{"start":{"line":97,"column":11},"end":{"line":97,"column":11},"skip":true}]},"19":{"line":104,"type":"if","locations":[{"start":{"line":104,"column":10},"end":{"line":104,"column":10}},{"start":{"line":104,"column":10},"end":{"line":104,"column":10},"skip":true}]},"20":{"line":113,"type":"if","locations":[{"start":{"line":113,"column":7},"end":{"line":113,"column":7}},{"start":{"line":113,"column":7},"end":{"line":113,"column":7},"skip":true}]},"21":{"line":113,"type":"binary-expr","locations":[{"start":{"line":113,"column":11},"end":{"line":113,"column":34}},{"start":{"line":113,"column":38},"end":{"line":113,"column":64}}]},"22":{"line":116,"type":"if","locations":[{"start":{"line":116,"column":4},"end":{"line":116,"column":4}},{"start":{"line":116,"column":4},"end":{"line":116,"column":4}}]},"23":{"line":116,"type":"binary-expr","locations":[{"start":{"line":116,"column":8},"end":{"line":116,"column":35}},{"start":{"line":116,"column":39},"end":{"line":116,"column":73}}]},"24":{"line":122,"type":"if","locations":[{"start":{"line":122,"column":9},"end":{"line":122,"column":9}},{"start":{"line":122,"column":9},"end":{"line":122,"column":9},"skip":true}]}}}} \ No newline at end of file +{"/home/webreflection/code/domdiff/cjs/index.js":{"path":"/home/webreflection/code/domdiff/cjs/index.js","s":{"1":1,"2":467,"3":1,"4":98,"5":98,"6":98,"7":98,"8":98,"9":98,"10":98,"11":98,"12":98,"13":98,"14":98,"15":447,"16":44,"17":44,"18":403,"19":11,"20":392,"21":22,"22":370,"23":5,"24":365,"25":140,"26":140,"27":140,"28":225,"29":50,"30":50,"31":175,"32":52,"33":52,"34":52,"35":52,"36":123,"37":27,"38":27,"39":27,"40":96,"41":96,"42":52,"43":52,"44":44,"45":44,"46":44,"47":44,"48":98,"49":52,"50":31,"51":31,"52":31,"53":15,"54":16,"55":16,"56":48,"57":16,"58":46,"59":2,"60":46,"61":23,"62":23,"63":23,"64":23,"65":23,"66":98,"67":1},"b":{"1":[98,96],"2":[50,48],"3":[545,493],"4":[44,403],"5":[11,392],"6":[22,370],"7":[5,365],"8":[140,225],"9":[50,175],"10":[52,123],"11":[27,96],"12":[27,11],"13":[52,44],"14":[52,25],"15":[44,24],"16":[52,46],"17":[31,21],"18":[22,9],"19":[15,16],"20":[48,48],"21":[23,23]},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":10,"column":0},"end":{"line":10,"column":24}},"2":{"start":{"line":10,"column":22},"end":{"line":10,"column":23}},"3":{"start":{"line":12,"column":0},"end":{"line":118,"column":2}},"4":{"start":{"line":19,"column":2},"end":{"line":19,"column":34}},"5":{"start":{"line":20,"column":2},"end":{"line":20,"column":64}},"6":{"start":{"line":21,"column":2},"end":{"line":21,"column":40}},"7":{"start":{"line":22,"column":2},"end":{"line":22,"column":43}},"8":{"start":{"line":23,"column":2},"end":{"line":23,"column":31}},"9":{"start":{"line":24,"column":2},"end":{"line":24,"column":41}},"10":{"start":{"line":25,"column":2},"end":{"line":25,"column":48}},"11":{"start":{"line":26,"column":2},"end":{"line":26,"column":41}},"12":{"start":{"line":27,"column":2},"end":{"line":27,"column":39}},"13":{"start":{"line":28,"column":2},"end":{"line":28,"column":45}},"14":{"start":{"line":29,"column":2},"end":{"line":88,"column":3}},"15":{"start":{"line":30,"column":4},"end":{"line":87,"column":5}},"16":{"start":{"line":31,"column":6},"end":{"line":31,"column":31}},"17":{"start":{"line":32,"column":6},"end":{"line":32,"column":54}},"18":{"start":{"line":34,"column":9},"end":{"line":87,"column":5}},"19":{"start":{"line":35,"column":6},"end":{"line":35,"column":50}},"20":{"start":{"line":37,"column":9},"end":{"line":87,"column":5}},"21":{"start":{"line":38,"column":6},"end":{"line":38,"column":51}},"22":{"start":{"line":40,"column":9},"end":{"line":87,"column":5}},"23":{"start":{"line":41,"column":6},"end":{"line":41,"column":47}},"24":{"start":{"line":43,"column":9},"end":{"line":87,"column":5}},"25":{"start":{"line":44,"column":6},"end":{"line":44,"column":31}},"26":{"start":{"line":45,"column":6},"end":{"line":45,"column":54}},"27":{"start":{"line":46,"column":6},"end":{"line":46,"column":51}},"28":{"start":{"line":48,"column":9},"end":{"line":87,"column":5}},"29":{"start":{"line":49,"column":6},"end":{"line":49,"column":50}},"30":{"start":{"line":50,"column":6},"end":{"line":50,"column":47}},"31":{"start":{"line":52,"column":9},"end":{"line":87,"column":5}},"32":{"start":{"line":53,"column":6},"end":{"line":56,"column":8}},"33":{"start":{"line":57,"column":6},"end":{"line":57,"column":31}},"34":{"start":{"line":58,"column":6},"end":{"line":58,"column":54}},"35":{"start":{"line":59,"column":6},"end":{"line":59,"column":47}},"36":{"start":{"line":61,"column":9},"end":{"line":87,"column":5}},"37":{"start":{"line":62,"column":6},"end":{"line":65,"column":8}},"38":{"start":{"line":66,"column":6},"end":{"line":66,"column":50}},"39":{"start":{"line":67,"column":6},"end":{"line":67,"column":51}},"40":{"start":{"line":70,"column":6},"end":{"line":70,"column":56}},"41":{"start":{"line":71,"column":6},"end":{"line":86,"column":7}},"42":{"start":{"line":72,"column":8},"end":{"line":75,"column":10}},"43":{"start":{"line":76,"column":8},"end":{"line":76,"column":53}},"44":{"start":{"line":79,"column":8},"end":{"line":79,"column":37}},"45":{"start":{"line":80,"column":8},"end":{"line":80,"column":35}},"46":{"start":{"line":81,"column":8},"end":{"line":84,"column":10}},"47":{"start":{"line":85,"column":8},"end":{"line":85,"column":53}},"48":{"start":{"line":89,"column":2},"end":{"line":116,"column":3}},"49":{"start":{"line":90,"column":4},"end":{"line":103,"column":5}},"50":{"start":{"line":91,"column":6},"end":{"line":91,"column":45}},"51":{"start":{"line":92,"column":6},"end":{"line":92,"column":55}},"52":{"start":{"line":93,"column":6},"end":{"line":102,"column":7}},"53":{"start":{"line":94,"column":8},"end":{"line":94,"column":73}},"54":{"start":{"line":97,"column":8},"end":{"line":97,"column":75}},"55":{"start":{"line":98,"column":8},"end":{"line":100,"column":9}},"56":{"start":{"line":99,"column":10},"end":{"line":99,"column":67}},"57":{"start":{"line":101,"column":8},"end":{"line":101,"column":49}},"58":{"start":{"line":106,"column":4},"end":{"line":106,"column":92}},"59":{"start":{"line":106,"column":77},"end":{"line":106,"column":92}},"60":{"start":{"line":107,"column":4},"end":{"line":115,"column":5}},"61":{"start":{"line":108,"column":6},"end":{"line":108,"column":66}},"62":{"start":{"line":111,"column":6},"end":{"line":111,"column":59}},"63":{"start":{"line":112,"column":6},"end":{"line":112,"column":64}},"64":{"start":{"line":113,"column":6},"end":{"line":113,"column":59}},"65":{"start":{"line":114,"column":6},"end":{"line":114,"column":29}},"66":{"start":{"line":117,"column":2},"end":{"line":117,"column":21}},"67":{"start":{"line":120,"column":0},"end":{"line":120,"column":78}}},"branchMap":{"1":{"line":19,"type":"binary-expr","locations":[{"start":{"line":19,"column":14},"end":{"line":19,"column":21}},{"start":{"line":19,"column":25},"end":{"line":19,"column":33}}]},"2":{"line":20,"type":"cond-expr","locations":[{"start":{"line":20,"column":38},"end":{"line":20,"column":42}},{"start":{"line":20,"column":45},"end":{"line":20,"column":63}}]},"3":{"line":29,"type":"binary-expr","locations":[{"start":{"line":29,"column":9},"end":{"line":29,"column":35}},{"start":{"line":29,"column":39},"end":{"line":29,"column":63}}]},"4":{"line":30,"type":"if","locations":[{"start":{"line":30,"column":4},"end":{"line":30,"column":4}},{"start":{"line":30,"column":4},"end":{"line":30,"column":4}}]},"5":{"line":34,"type":"if","locations":[{"start":{"line":34,"column":9},"end":{"line":34,"column":9}},{"start":{"line":34,"column":9},"end":{"line":34,"column":9}}]},"6":{"line":37,"type":"if","locations":[{"start":{"line":37,"column":9},"end":{"line":37,"column":9}},{"start":{"line":37,"column":9},"end":{"line":37,"column":9}}]},"7":{"line":40,"type":"if","locations":[{"start":{"line":40,"column":9},"end":{"line":40,"column":9}},{"start":{"line":40,"column":9},"end":{"line":40,"column":9}}]},"8":{"line":43,"type":"if","locations":[{"start":{"line":43,"column":9},"end":{"line":43,"column":9}},{"start":{"line":43,"column":9},"end":{"line":43,"column":9}}]},"9":{"line":48,"type":"if","locations":[{"start":{"line":48,"column":9},"end":{"line":48,"column":9}},{"start":{"line":48,"column":9},"end":{"line":48,"column":9}}]},"10":{"line":52,"type":"if","locations":[{"start":{"line":52,"column":9},"end":{"line":52,"column":9}},{"start":{"line":52,"column":9},"end":{"line":52,"column":9}}]},"11":{"line":61,"type":"if","locations":[{"start":{"line":61,"column":9},"end":{"line":61,"column":9}},{"start":{"line":61,"column":9},"end":{"line":61,"column":9}}]},"12":{"line":64,"type":"binary-expr","locations":[{"start":{"line":64,"column":8},"end":{"line":64,"column":25}},{"start":{"line":64,"column":30},"end":{"line":64,"column":74}}]},"13":{"line":71,"type":"if","locations":[{"start":{"line":71,"column":6},"end":{"line":71,"column":6}},{"start":{"line":71,"column":6},"end":{"line":71,"column":6}}]},"14":{"line":74,"type":"binary-expr","locations":[{"start":{"line":74,"column":10},"end":{"line":74,"column":27}},{"start":{"line":74,"column":32},"end":{"line":74,"column":76}}]},"15":{"line":83,"type":"binary-expr","locations":[{"start":{"line":83,"column":10},"end":{"line":83,"column":27}},{"start":{"line":83,"column":32},"end":{"line":83,"column":76}}]},"16":{"line":89,"type":"if","locations":[{"start":{"line":89,"column":2},"end":{"line":89,"column":2}},{"start":{"line":89,"column":2},"end":{"line":89,"column":2}}]},"17":{"line":90,"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":90,"column":4}},{"start":{"line":90,"column":4},"end":{"line":90,"column":4}}]},"18":{"line":92,"type":"cond-expr","locations":[{"start":{"line":92,"column":34},"end":{"line":92,"column":40}},{"start":{"line":92,"column":43},"end":{"line":92,"column":54}}]},"19":{"line":93,"type":"if","locations":[{"start":{"line":93,"column":6},"end":{"line":93,"column":6}},{"start":{"line":93,"column":6},"end":{"line":93,"column":6}}]},"20":{"line":106,"type":"binary-expr","locations":[{"start":{"line":106,"column":11},"end":{"line":106,"column":37}},{"start":{"line":106,"column":41},"end":{"line":106,"column":75}}]},"21":{"line":107,"type":"if","locations":[{"start":{"line":107,"column":4},"end":{"line":107,"column":4}},{"start":{"line":107,"column":4},"end":{"line":107,"column":4}}]}}}} \ No newline at end of file diff --git a/coverage/lcov-report/cjs/index.html b/coverage/lcov-report/cjs/index.html index 02b2376..c43b5e3 100644 --- a/coverage/lcov-report/cjs/index.html +++ b/coverage/lcov-report/cjs/index.html @@ -20,14 +20,14 @@

- 95.95% + 100% Statements - 71/74 + 67/67
100% Branches - 48/48 + 42/42
100% @@ -37,11 +37,7 @@

100% Lines - 68/68 -
-
- 4 branches - Ignored      + 65/65

@@ -64,15 +60,15 @@

index.js -
- 95.95% - 71/74 +
+ 100% + 67/67 100% - 48/48 + 42/42 100% 0/0 100% - 68/68 + 65/65 @@ -81,7 +77,7 @@

diff --git a/coverage/lcov-report/cjs/index.js.html b/coverage/lcov-report/cjs/index.js.html index a08ac4f..46c76a1 100644 --- a/coverage/lcov-report/cjs/index.js.html +++ b/coverage/lcov-report/cjs/index.js.html @@ -20,14 +20,14 @@

- 95.95% + 100% Statements - 71/74 + 67/67
100% Branches - 48/48 + 42/42
100% @@ -37,11 +37,7 @@

100% Lines - 68/68 -
-
- 4 branches - Ignored      + 65/65

@@ -167,19 +163,7 @@

118 119 120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133  +121        @@ -188,7 +172,7 @@

      -528× +467×     @@ -207,8 +191,10 @@

98× 98× 98× +98× 447× 44× +44×   403× 11× @@ -222,6 +208,7 @@

365× 140× 140× +140×   225× 50× @@ -234,6 +221,7 @@

  52× 52× +52×   123× 27× @@ -268,39 +256,23 @@

31× 31× 31× -31× -31× 15×     -  -  -16× 16× 16× 48×   -  -  -48× -  16×         -  -  -46× -46× 46× 46× 23×     -  -  -23× 23× 23× 23× @@ -333,6 +305,7 @@

const before = beforeNode == null ? null : get(beforeNode, 0); let currentStart = 0, futureStart = 0; let currentEnd = currentNodes.length - 1; + let currentStartNodeZ = null; let currentStartNode = currentNodes[0]; let currentEndNode = currentNodes[currentEnd]; let futureEnd = futureNodes.length - 1; @@ -340,6 +313,7 @@

let futureEndNode = futureNodes[futureEnd]; while (currentStart <= currentEnd && futureStart <= futureEnd) { if (currentStartNode == null) { + currentStartNodeZ = null; currentStartNode = currentNodes[++currentStart]; } else if (currentEndNode == null) { @@ -352,6 +326,7 @@

futureEndNode = futureNodes[--futureEnd]; } else if (currentStartNode == futureStartNode) { + currentStartNodeZ = null; currentStartNode = currentNodes[++currentStart]; futureStartNode = futureNodes[++futureStart]; } @@ -364,13 +339,14 @@

get(currentStartNode, 1), get(currentEndNode, -0).nextSibling ); + currentStartNodeZ = null; currentStartNode = currentNodes[++currentStart]; futureEndNode = futureNodes[--futureEnd]; } else if (currentEndNode == futureStartNode) { parentNode.insertBefore( get(currentEndNode, 1), - get(currentStartNode, 0) + currentStartNodeZ || (currentStartNodeZ = get(currentStartNode, 0)) ); currentEndNode = currentNodes[--currentEnd]; futureStartNode = futureNodes[++futureStart]; @@ -380,7 +356,7 @@

if (index < 0) { parentNode.insertBefore( get(futureStartNode, 1), - get(currentStartNode, 0) + currentStartNodeZ || (currentStartNodeZ = get(currentStartNode, 0)) ); futureStartNode = futureNodes[++futureStart]; } @@ -389,7 +365,7 @@

currentNodes[index] = null; parentNode.insertBefore( get(el, 1), - get(currentStartNode, 0) + currentStartNodeZ || (currentStartNodeZ = get(currentStartNode, 0)) ); futureStartNode = futureNodes[++futureStart]; } @@ -399,40 +375,24 @@

if (futureStart <= futureEnd) { const pin = futureNodes[futureEnd + 1]; const place = pin == null ? before : get(pin, 0); - while (futureNodes[futureStart] == null) futureStart++; - while (futureNodes[futureEnd] == null) futureEnd--; - if (futureStart === futureEnd && futureNodes[futureStart] != null) { + if (futureStart === futureEnd) { parentNode.insertBefore(get(futureNodes[futureStart], 1), place); } - // ignore until I am sure the else could never happen. - // it might be a vDOM thing 'cause it never happens here. - /* istanbul ignore else */ - else Eif (futureStart < futureEnd) { + else { const fragment = parentNode.ownerDocument.createDocumentFragment(); while (futureStart <= futureEnd) { - const node = futureNodes[futureStart++]; - // ignore until I am sure the else could never happen. - // it might be a vDOM thing 'cause it never happens here. - /* istanbul ignore else */ - Eif (node != null) fragment.appendChild(get(node, 1)); + fragment.appendChild(get(futureNodes[futureStart++], 1)); } parentNode.insertBefore(fragment, place); } } } - // ignore until I am sure the else could never happen. - // it might be a vDOM thing 'cause it never happens here. - /* istanbul ignore else */ - else Eif (futureStart > futureEnd && currentStart <= currentEnd) { - while (currentNodes[currentStart] == null) currentStart++; - while (currentNodes[currentEnd] == null) currentEnd--; - if (currentStart === currentEnd && currentNodes[currentStart] != null) { + else { + while (currentStart <= currentEnd && currentNodes[currentStart] == null) currentStart++; + if (currentStart === currentEnd) { parentNode.removeChild(get(currentNodes[currentStart], -1)); } - // ignore until I am sure the else could never happen. - // it might be a vDOM thing 'cause it never happens here. - /* istanbul ignore else */ - else Eif (currentStart < currentEnd) { + else { const range = parentNode.ownerDocument.createRange(); range.setStartBefore(get(currentNodes[currentStart], -1)); range.setEndAfter(get(currentNodes[currentEnd], -1)); @@ -449,7 +409,7 @@

diff --git a/coverage/lcov-report/index.html b/coverage/lcov-report/index.html index 4c15547..233baed 100644 --- a/coverage/lcov-report/index.html +++ b/coverage/lcov-report/index.html @@ -20,14 +20,14 @@

- 95.95% + 100% Statements - 71/74 + 67/67
100% Branches - 48/48 + 42/42
100% @@ -37,11 +37,7 @@

100% Lines - 68/68 -
-
- 4 branches - Ignored      + 65/65

@@ -64,15 +60,15 @@

cjs/ -
- 95.95% - 71/74 +
+ 100% + 67/67 100% - 48/48 + 42/42 100% 0/0 100% - 68/68 + 65/65 @@ -81,7 +77,7 @@

diff --git a/coverage/lcov.info b/coverage/lcov.info index 518e89d..1ef403a 100644 --- a/coverage/lcov.info +++ b/coverage/lcov.info @@ -2,7 +2,7 @@ TN: SF:/home/webreflection/code/domdiff/cjs/index.js FNF:0 FNH:0 -DA:10,528 +DA:10,467 DA:12,1 DA:19,98 DA:20,98 @@ -14,112 +14,103 @@ DA:25,98 DA:26,98 DA:27,98 DA:28,98 -DA:29,447 -DA:30,44 -DA:32,403 -DA:33,11 -DA:35,392 -DA:36,22 -DA:38,370 -DA:39,5 -DA:41,365 -DA:42,140 -DA:43,140 -DA:45,225 -DA:46,50 -DA:47,50 -DA:49,175 -DA:50,52 -DA:54,52 -DA:55,52 -DA:57,123 -DA:58,27 +DA:29,98 +DA:30,447 +DA:31,44 +DA:32,44 +DA:34,403 +DA:35,11 +DA:37,392 +DA:38,22 +DA:40,370 +DA:41,5 +DA:43,365 +DA:44,140 +DA:45,140 +DA:46,140 +DA:48,225 +DA:49,50 +DA:50,50 +DA:52,175 +DA:53,52 +DA:57,52 +DA:58,52 +DA:59,52 +DA:61,123 DA:62,27 -DA:63,27 -DA:66,96 -DA:67,96 -DA:68,52 +DA:66,27 +DA:67,27 +DA:70,96 +DA:71,96 DA:72,52 -DA:75,44 -DA:76,44 -DA:77,44 +DA:76,52 +DA:79,44 +DA:80,44 DA:81,44 -DA:85,98 -DA:86,52 -DA:87,31 -DA:88,31 -DA:89,31 -DA:90,31 +DA:85,44 +DA:89,98 +DA:90,52 DA:91,31 -DA:92,15 +DA:92,31 +DA:93,31 +DA:94,15 DA:97,16 DA:98,16 -DA:99,16 -DA:100,48 -DA:104,48 -DA:106,16 -DA:113,46 -DA:114,46 -DA:115,46 -DA:116,46 -DA:117,23 -DA:122,23 -DA:123,23 -DA:124,23 -DA:125,23 -DA:126,23 -DA:129,98 -DA:132,1 -LF:68 -LH:68 +DA:99,48 +DA:101,16 +DA:106,46 +DA:107,46 +DA:108,23 +DA:111,23 +DA:112,23 +DA:113,23 +DA:114,23 +DA:117,98 +DA:120,1 +LF:65 +LH:65 BRDA:19,1,0,98 BRDA:19,1,1,96 BRDA:20,2,0,50 BRDA:20,2,1,48 -BRDA:28,3,0,545 -BRDA:28,3,1,493 -BRDA:29,4,0,44 -BRDA:29,4,1,403 -BRDA:32,5,0,11 -BRDA:32,5,1,392 -BRDA:35,6,0,22 -BRDA:35,6,1,370 -BRDA:38,7,0,5 -BRDA:38,7,1,365 -BRDA:41,8,0,140 -BRDA:41,8,1,225 -BRDA:45,9,0,50 -BRDA:45,9,1,175 -BRDA:49,10,0,52 -BRDA:49,10,1,123 -BRDA:57,11,0,27 -BRDA:57,11,1,96 -BRDA:67,12,0,52 -BRDA:67,12,1,44 -BRDA:85,13,0,52 -BRDA:85,13,1,46 -BRDA:86,14,0,31 -BRDA:86,14,1,21 -BRDA:88,15,0,22 -BRDA:88,15,1,9 -BRDA:91,16,0,15 -BRDA:91,16,1,16 -BRDA:91,17,0,31 -BRDA:91,17,1,15 -BRDA:97,18,0,16 -BRDA:97,18,1,0 -BRDA:104,19,0,48 -BRDA:104,19,1,0 -BRDA:113,20,0,46 -BRDA:113,20,1,0 -BRDA:113,21,0,46 -BRDA:113,21,1,46 -BRDA:116,22,0,23 -BRDA:116,22,1,23 -BRDA:116,23,0,46 -BRDA:116,23,1,23 -BRDA:122,24,0,23 -BRDA:122,24,1,0 -BRF:48 -BRH:48 +BRDA:29,3,0,545 +BRDA:29,3,1,493 +BRDA:30,4,0,44 +BRDA:30,4,1,403 +BRDA:34,5,0,11 +BRDA:34,5,1,392 +BRDA:37,6,0,22 +BRDA:37,6,1,370 +BRDA:40,7,0,5 +BRDA:40,7,1,365 +BRDA:43,8,0,140 +BRDA:43,8,1,225 +BRDA:48,9,0,50 +BRDA:48,9,1,175 +BRDA:52,10,0,52 +BRDA:52,10,1,123 +BRDA:61,11,0,27 +BRDA:61,11,1,96 +BRDA:64,12,0,27 +BRDA:64,12,1,11 +BRDA:71,13,0,52 +BRDA:71,13,1,44 +BRDA:74,14,0,52 +BRDA:74,14,1,25 +BRDA:83,15,0,44 +BRDA:83,15,1,24 +BRDA:89,16,0,52 +BRDA:89,16,1,46 +BRDA:90,17,0,31 +BRDA:90,17,1,21 +BRDA:92,18,0,22 +BRDA:92,18,1,9 +BRDA:93,19,0,15 +BRDA:93,19,1,16 +BRDA:106,20,0,48 +BRDA:106,20,1,48 +BRDA:107,21,0,23 +BRDA:107,21,1,23 +BRF:42 +BRH:42 end_of_record diff --git a/esm/index.js b/esm/index.js index 14521e6..8f65f60 100644 --- a/esm/index.js +++ b/esm/index.js @@ -19,6 +19,7 @@ const domdiff = ( const before = beforeNode == null ? null : get(beforeNode, 0); let currentStart = 0, futureStart = 0; let currentEnd = currentNodes.length - 1; + let currentStartNodeZ = null; let currentStartNode = currentNodes[0]; let currentEndNode = currentNodes[currentEnd]; let futureEnd = futureNodes.length - 1; @@ -26,6 +27,7 @@ const domdiff = ( let futureEndNode = futureNodes[futureEnd]; while (currentStart <= currentEnd && futureStart <= futureEnd) { if (currentStartNode == null) { + currentStartNodeZ = null; currentStartNode = currentNodes[++currentStart]; } else if (currentEndNode == null) { @@ -38,6 +40,7 @@ const domdiff = ( futureEndNode = futureNodes[--futureEnd]; } else if (currentStartNode == futureStartNode) { + currentStartNodeZ = null; currentStartNode = currentNodes[++currentStart]; futureStartNode = futureNodes[++futureStart]; } @@ -50,13 +53,14 @@ const domdiff = ( get(currentStartNode, 1), get(currentEndNode, -0).nextSibling ); + currentStartNodeZ = null; currentStartNode = currentNodes[++currentStart]; futureEndNode = futureNodes[--futureEnd]; } else if (currentEndNode == futureStartNode) { parentNode.insertBefore( get(currentEndNode, 1), - get(currentStartNode, 0) + currentStartNodeZ || (currentStartNodeZ = get(currentStartNode, 0)) ); currentEndNode = currentNodes[--currentEnd]; futureStartNode = futureNodes[++futureStart]; @@ -66,7 +70,7 @@ const domdiff = ( if (index < 0) { parentNode.insertBefore( get(futureStartNode, 1), - get(currentStartNode, 0) + currentStartNodeZ || (currentStartNodeZ = get(currentStartNode, 0)) ); futureStartNode = futureNodes[++futureStart]; } @@ -75,7 +79,7 @@ const domdiff = ( currentNodes[index] = null; parentNode.insertBefore( get(el, 1), - get(currentStartNode, 0) + currentStartNodeZ || (currentStartNodeZ = get(currentStartNode, 0)) ); futureStartNode = futureNodes[++futureStart]; } @@ -85,40 +89,24 @@ const domdiff = ( if (futureStart <= futureEnd) { const pin = futureNodes[futureEnd + 1]; const place = pin == null ? before : get(pin, 0); - while (futureNodes[futureStart] == null) futureStart++; - while (futureNodes[futureEnd] == null) futureEnd--; - if (futureStart === futureEnd && futureNodes[futureStart] != null) { + if (futureStart === futureEnd) { parentNode.insertBefore(get(futureNodes[futureStart], 1), place); } - // ignore until I am sure the else could never happen. - // it might be a vDOM thing 'cause it never happens here. - /* istanbul ignore else */ - else if (futureStart < futureEnd) { + else { const fragment = parentNode.ownerDocument.createDocumentFragment(); while (futureStart <= futureEnd) { - const node = futureNodes[futureStart++]; - // ignore until I am sure the else could never happen. - // it might be a vDOM thing 'cause it never happens here. - /* istanbul ignore else */ - if (node != null) fragment.appendChild(get(node, 1)); + fragment.appendChild(get(futureNodes[futureStart++], 1)); } parentNode.insertBefore(fragment, place); } } } - // ignore until I am sure the else could never happen. - // it might be a vDOM thing 'cause it never happens here. - /* istanbul ignore else */ - else if (futureStart > futureEnd && currentStart <= currentEnd) { - while (currentNodes[currentStart] == null) currentStart++; - while (currentNodes[currentEnd] == null) currentEnd--; - if (currentStart === currentEnd && currentNodes[currentStart] != null) { + else { + while (currentStart <= currentEnd && currentNodes[currentStart] == null) currentStart++; + if (currentStart === currentEnd) { parentNode.removeChild(get(currentNodes[currentStart], -1)); } - // ignore until I am sure the else could never happen. - // it might be a vDOM thing 'cause it never happens here. - /* istanbul ignore else */ - else if (currentStart < currentEnd) { + else { const range = parentNode.ownerDocument.createRange(); range.setStartBefore(get(currentNodes[currentStart], -1)); range.setEndAfter(get(currentNodes[currentEnd], -1)); diff --git a/index.js b/index.js index 5717f3e..9bc16af 100644 --- a/index.js +++ b/index.js @@ -24,6 +24,7 @@ beforeNode // optional item/node to use as insertBefore delimiter var currentStart = 0, futureStart = 0; var currentEnd = currentNodes.length - 1; + var currentStartNodeZ = null; var currentStartNode = currentNodes[0]; var currentEndNode = currentNodes[currentEnd]; var futureEnd = futureNodes.length - 1; @@ -31,6 +32,7 @@ beforeNode // optional item/node to use as insertBefore delimiter var futureEndNode = futureNodes[futureEnd]; while (currentStart <= currentEnd && futureStart <= futureEnd) { if (currentStartNode == null) { + currentStartNodeZ = null; currentStartNode = currentNodes[++currentStart]; } else if (currentEndNode == null) { currentEndNode = currentNodes[--currentEnd]; @@ -39,6 +41,7 @@ beforeNode // optional item/node to use as insertBefore delimiter } else if (futureEndNode == null) { futureEndNode = futureNodes[--futureEnd]; } else if (currentStartNode == futureStartNode) { + currentStartNodeZ = null; currentStartNode = currentNodes[++currentStart]; futureStartNode = futureNodes[++futureStart]; } else if (currentEndNode == futureEndNode) { @@ -46,21 +49,22 @@ beforeNode // optional item/node to use as insertBefore delimiter futureEndNode = futureNodes[--futureEnd]; } else if (currentStartNode == futureEndNode) { parentNode.insertBefore(get(currentStartNode, 1), get(currentEndNode, -0).nextSibling); + currentStartNodeZ = null; currentStartNode = currentNodes[++currentStart]; futureEndNode = futureNodes[--futureEnd]; } else if (currentEndNode == futureStartNode) { - parentNode.insertBefore(get(currentEndNode, 1), get(currentStartNode, 0)); + parentNode.insertBefore(get(currentEndNode, 1), currentStartNodeZ || (currentStartNodeZ = get(currentStartNode, 0))); currentEndNode = currentNodes[--currentEnd]; futureStartNode = futureNodes[++futureStart]; } else { var index = currentNodes.indexOf(futureStartNode); if (index < 0) { - parentNode.insertBefore(get(futureStartNode, 1), get(currentStartNode, 0)); + parentNode.insertBefore(get(futureStartNode, 1), currentStartNodeZ || (currentStartNodeZ = get(currentStartNode, 0))); futureStartNode = futureNodes[++futureStart]; } else { var el = currentNodes[index]; currentNodes[index] = null; - parentNode.insertBefore(get(el, 1), get(currentStartNode, 0)); + parentNode.insertBefore(get(el, 1), currentStartNodeZ || (currentStartNodeZ = get(currentStartNode, 0))); futureStartNode = futureNodes[++futureStart]; } } @@ -69,50 +73,28 @@ beforeNode // optional item/node to use as insertBefore delimiter if (futureStart <= futureEnd) { var pin = futureNodes[futureEnd + 1]; var place = pin == null ? before : get(pin, 0); - while (futureNodes[futureStart] == null) { - futureStart++; - }while (futureNodes[futureEnd] == null) { - futureEnd--; - }if (futureStart === futureEnd && futureNodes[futureStart] != null) { + if (futureStart === futureEnd) { parentNode.insertBefore(get(futureNodes[futureStart], 1), place); - } - // ignore until I am sure the else could never happen. - // it might be a vDOM thing 'cause it never happens here. - /* istanbul ignore else */ - else if (futureStart < futureEnd) { - var fragment = parentNode.ownerDocument.createDocumentFragment(); - while (futureStart <= futureEnd) { - var node = futureNodes[futureStart++]; - // ignore until I am sure the else could never happen. - // it might be a vDOM thing 'cause it never happens here. - /* istanbul ignore else */ - if (node != null) fragment.appendChild(get(node, 1)); - } - parentNode.insertBefore(fragment, place); + } else { + var fragment = parentNode.ownerDocument.createDocumentFragment(); + while (futureStart <= futureEnd) { + fragment.appendChild(get(futureNodes[futureStart++], 1)); } - } - } - // ignore until I am sure the else could never happen. - // it might be a vDOM thing 'cause it never happens here. - /* istanbul ignore else */ - else if (futureStart > futureEnd && currentStart <= currentEnd) { - while (currentNodes[currentStart] == null) { - currentStart++; - }while (currentNodes[currentEnd] == null) { - currentEnd--; - }if (currentStart === currentEnd && currentNodes[currentStart] != null) { - parentNode.removeChild(get(currentNodes[currentStart], -1)); + parentNode.insertBefore(fragment, place); } - // ignore until I am sure the else could never happen. - // it might be a vDOM thing 'cause it never happens here. - /* istanbul ignore else */ - else if (currentStart < currentEnd) { - var range = parentNode.ownerDocument.createRange(); - range.setStartBefore(get(currentNodes[currentStart], -1)); - range.setEndAfter(get(currentNodes[currentEnd], -1)); - range.deleteContents(); - } } + } else { + while (currentStart <= currentEnd && currentNodes[currentStart] == null) { + currentStart++; + }if (currentStart === currentEnd) { + parentNode.removeChild(get(currentNodes[currentStart], -1)); + } else { + var range = parentNode.ownerDocument.createRange(); + range.setStartBefore(get(currentNodes[currentStart], -1)); + range.setEndAfter(get(currentNodes[currentEnd], -1)); + range.deleteContents(); + } + } return futureNodes; }; diff --git a/min.js b/min.js index d71a2da..a610fb5 100644 --- a/min.js +++ b/min.js @@ -1,2 +1,2 @@ var domdiff=function(){"use strict";/*! (c) 2017 Andrea Giammarchi (ISC) */ -var e=function(e){return e};return function(l,n,r,f,i){for(var t=f||e,u=null==i?null:t(i,0),o=0,s=0,a=n.length-1,v=n[0],c=n[a],d=r.length-1,B=r[0],m=r[d];o<=a&&s<=d;)if(null==v)v=n[++o];else if(null==c)c=n[--a];else if(null==B)B=r[++s];else if(null==m)m=r[--d];else if(v==B)v=n[++o],B=r[++s];else if(c==m)c=n[--a],m=r[--d];else if(v==m)l.insertBefore(t(v,1),t(c,-0).nextSibling),v=n[++o],m=r[--d];else if(c==B)l.insertBefore(t(c,1),t(v,0)),c=n[--a],B=r[++s];else{var g=n.indexOf(B);if(g<0)l.insertBefore(t(B,1),t(v,0)),B=r[++s];else{var h=n[g];n[g]=null,l.insertBefore(t(h,1),t(v,0)),B=r[++s]}}if(o>a){if(s<=d){for(var C=r[d+1],D=null==C?u:t(C,0);null==r[s];)s++;for(;null==r[d];)d--;if(s===d&&null!=r[s])l.insertBefore(t(r[s],1),D);else if(sd&&o<=a){for(;null==n[o];)o++;for(;null==n[a];)a--;if(o===a&&null!=n[o])l.removeChild(t(n[o],-1));else if(oa){if(o<=B){var D=r[B+1],p=null==D?s:i(D,0);if(o===B)l.insertBefore(i(r[o],1),p);else{for(var w=l.ownerDocument.createDocumentFragment();o<=B;)w.appendChild(i(r[o++],1));l.insertBefore(w,p)}}}else{for(;u<=a&&null==n[u];)u++;if(u===a)l.removeChild(i(n[u],-1));else{var x=l.ownerDocument.createRange();x.setStartBefore(i(n[u],-1)),x.setEndAfter(i(n[a],-1)),x.deleteContents()}}return r}}(); \ No newline at end of file diff --git a/test/diff.html b/test/diff.html new file mode 100644 index 0000000..fe8ac07 --- /dev/null +++ b/test/diff.html @@ -0,0 +1,104 @@ + + + + DOM Diff - Bob & Lucy + + +
+ + + \ No newline at end of file From 47a449aeb4b2983c0f0ba7c630ac9101405fa472 Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Wed, 6 Dec 2017 13:25:08 -0200 Subject: [PATCH 13/71] publishing not-null-guarded version --- cjs/index.js | 10 +- coverage/coverage.json | 2 +- coverage/lcov-report/cjs/index.html | 14 +- coverage/lcov-report/cjs/index.js.html | 30 ++--- coverage/lcov-report/index.html | 14 +- coverage/lcov.info | 172 ++++++++++++------------- esm/index.js | 10 +- index.js | 10 +- min.js | 2 +- 9 files changed, 115 insertions(+), 149 deletions(-) diff --git a/cjs/index.js b/cjs/index.js index b0d8319..256c91c 100644 --- a/cjs/index.js +++ b/cjs/index.js @@ -20,7 +20,6 @@ const domdiff = ( const before = beforeNode == null ? null : get(beforeNode, 0); let currentStart = 0, futureStart = 0; let currentEnd = currentNodes.length - 1; - let currentStartNodeZ = null; let currentStartNode = currentNodes[0]; let currentEndNode = currentNodes[currentEnd]; let futureEnd = futureNodes.length - 1; @@ -28,7 +27,6 @@ const domdiff = ( let futureEndNode = futureNodes[futureEnd]; while (currentStart <= currentEnd && futureStart <= futureEnd) { if (currentStartNode == null) { - currentStartNodeZ = null; currentStartNode = currentNodes[++currentStart]; } else if (currentEndNode == null) { @@ -41,7 +39,6 @@ const domdiff = ( futureEndNode = futureNodes[--futureEnd]; } else if (currentStartNode == futureStartNode) { - currentStartNodeZ = null; currentStartNode = currentNodes[++currentStart]; futureStartNode = futureNodes[++futureStart]; } @@ -54,14 +51,13 @@ const domdiff = ( get(currentStartNode, 1), get(currentEndNode, -0).nextSibling ); - currentStartNodeZ = null; currentStartNode = currentNodes[++currentStart]; futureEndNode = futureNodes[--futureEnd]; } else if (currentEndNode == futureStartNode) { parentNode.insertBefore( get(currentEndNode, 1), - currentStartNodeZ || (currentStartNodeZ = get(currentStartNode, 0)) + get(currentStartNode, 0) ); currentEndNode = currentNodes[--currentEnd]; futureStartNode = futureNodes[++futureStart]; @@ -71,7 +67,7 @@ const domdiff = ( if (index < 0) { parentNode.insertBefore( get(futureStartNode, 1), - currentStartNodeZ || (currentStartNodeZ = get(currentStartNode, 0)) + get(currentStartNode, 0) ); futureStartNode = futureNodes[++futureStart]; } @@ -80,7 +76,7 @@ const domdiff = ( currentNodes[index] = null; parentNode.insertBefore( get(el, 1), - currentStartNodeZ || (currentStartNodeZ = get(currentStartNode, 0)) + get(currentStartNode, 0) ); futureStartNode = futureNodes[++futureStart]; } diff --git a/coverage/coverage.json b/coverage/coverage.json index c83359c..b339fbe 100644 --- a/coverage/coverage.json +++ b/coverage/coverage.json @@ -1 +1 @@ -{"/home/webreflection/code/domdiff/cjs/index.js":{"path":"/home/webreflection/code/domdiff/cjs/index.js","s":{"1":1,"2":467,"3":1,"4":98,"5":98,"6":98,"7":98,"8":98,"9":98,"10":98,"11":98,"12":98,"13":98,"14":98,"15":447,"16":44,"17":44,"18":403,"19":11,"20":392,"21":22,"22":370,"23":5,"24":365,"25":140,"26":140,"27":140,"28":225,"29":50,"30":50,"31":175,"32":52,"33":52,"34":52,"35":52,"36":123,"37":27,"38":27,"39":27,"40":96,"41":96,"42":52,"43":52,"44":44,"45":44,"46":44,"47":44,"48":98,"49":52,"50":31,"51":31,"52":31,"53":15,"54":16,"55":16,"56":48,"57":16,"58":46,"59":2,"60":46,"61":23,"62":23,"63":23,"64":23,"65":23,"66":98,"67":1},"b":{"1":[98,96],"2":[50,48],"3":[545,493],"4":[44,403],"5":[11,392],"6":[22,370],"7":[5,365],"8":[140,225],"9":[50,175],"10":[52,123],"11":[27,96],"12":[27,11],"13":[52,44],"14":[52,25],"15":[44,24],"16":[52,46],"17":[31,21],"18":[22,9],"19":[15,16],"20":[48,48],"21":[23,23]},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":10,"column":0},"end":{"line":10,"column":24}},"2":{"start":{"line":10,"column":22},"end":{"line":10,"column":23}},"3":{"start":{"line":12,"column":0},"end":{"line":118,"column":2}},"4":{"start":{"line":19,"column":2},"end":{"line":19,"column":34}},"5":{"start":{"line":20,"column":2},"end":{"line":20,"column":64}},"6":{"start":{"line":21,"column":2},"end":{"line":21,"column":40}},"7":{"start":{"line":22,"column":2},"end":{"line":22,"column":43}},"8":{"start":{"line":23,"column":2},"end":{"line":23,"column":31}},"9":{"start":{"line":24,"column":2},"end":{"line":24,"column":41}},"10":{"start":{"line":25,"column":2},"end":{"line":25,"column":48}},"11":{"start":{"line":26,"column":2},"end":{"line":26,"column":41}},"12":{"start":{"line":27,"column":2},"end":{"line":27,"column":39}},"13":{"start":{"line":28,"column":2},"end":{"line":28,"column":45}},"14":{"start":{"line":29,"column":2},"end":{"line":88,"column":3}},"15":{"start":{"line":30,"column":4},"end":{"line":87,"column":5}},"16":{"start":{"line":31,"column":6},"end":{"line":31,"column":31}},"17":{"start":{"line":32,"column":6},"end":{"line":32,"column":54}},"18":{"start":{"line":34,"column":9},"end":{"line":87,"column":5}},"19":{"start":{"line":35,"column":6},"end":{"line":35,"column":50}},"20":{"start":{"line":37,"column":9},"end":{"line":87,"column":5}},"21":{"start":{"line":38,"column":6},"end":{"line":38,"column":51}},"22":{"start":{"line":40,"column":9},"end":{"line":87,"column":5}},"23":{"start":{"line":41,"column":6},"end":{"line":41,"column":47}},"24":{"start":{"line":43,"column":9},"end":{"line":87,"column":5}},"25":{"start":{"line":44,"column":6},"end":{"line":44,"column":31}},"26":{"start":{"line":45,"column":6},"end":{"line":45,"column":54}},"27":{"start":{"line":46,"column":6},"end":{"line":46,"column":51}},"28":{"start":{"line":48,"column":9},"end":{"line":87,"column":5}},"29":{"start":{"line":49,"column":6},"end":{"line":49,"column":50}},"30":{"start":{"line":50,"column":6},"end":{"line":50,"column":47}},"31":{"start":{"line":52,"column":9},"end":{"line":87,"column":5}},"32":{"start":{"line":53,"column":6},"end":{"line":56,"column":8}},"33":{"start":{"line":57,"column":6},"end":{"line":57,"column":31}},"34":{"start":{"line":58,"column":6},"end":{"line":58,"column":54}},"35":{"start":{"line":59,"column":6},"end":{"line":59,"column":47}},"36":{"start":{"line":61,"column":9},"end":{"line":87,"column":5}},"37":{"start":{"line":62,"column":6},"end":{"line":65,"column":8}},"38":{"start":{"line":66,"column":6},"end":{"line":66,"column":50}},"39":{"start":{"line":67,"column":6},"end":{"line":67,"column":51}},"40":{"start":{"line":70,"column":6},"end":{"line":70,"column":56}},"41":{"start":{"line":71,"column":6},"end":{"line":86,"column":7}},"42":{"start":{"line":72,"column":8},"end":{"line":75,"column":10}},"43":{"start":{"line":76,"column":8},"end":{"line":76,"column":53}},"44":{"start":{"line":79,"column":8},"end":{"line":79,"column":37}},"45":{"start":{"line":80,"column":8},"end":{"line":80,"column":35}},"46":{"start":{"line":81,"column":8},"end":{"line":84,"column":10}},"47":{"start":{"line":85,"column":8},"end":{"line":85,"column":53}},"48":{"start":{"line":89,"column":2},"end":{"line":116,"column":3}},"49":{"start":{"line":90,"column":4},"end":{"line":103,"column":5}},"50":{"start":{"line":91,"column":6},"end":{"line":91,"column":45}},"51":{"start":{"line":92,"column":6},"end":{"line":92,"column":55}},"52":{"start":{"line":93,"column":6},"end":{"line":102,"column":7}},"53":{"start":{"line":94,"column":8},"end":{"line":94,"column":73}},"54":{"start":{"line":97,"column":8},"end":{"line":97,"column":75}},"55":{"start":{"line":98,"column":8},"end":{"line":100,"column":9}},"56":{"start":{"line":99,"column":10},"end":{"line":99,"column":67}},"57":{"start":{"line":101,"column":8},"end":{"line":101,"column":49}},"58":{"start":{"line":106,"column":4},"end":{"line":106,"column":92}},"59":{"start":{"line":106,"column":77},"end":{"line":106,"column":92}},"60":{"start":{"line":107,"column":4},"end":{"line":115,"column":5}},"61":{"start":{"line":108,"column":6},"end":{"line":108,"column":66}},"62":{"start":{"line":111,"column":6},"end":{"line":111,"column":59}},"63":{"start":{"line":112,"column":6},"end":{"line":112,"column":64}},"64":{"start":{"line":113,"column":6},"end":{"line":113,"column":59}},"65":{"start":{"line":114,"column":6},"end":{"line":114,"column":29}},"66":{"start":{"line":117,"column":2},"end":{"line":117,"column":21}},"67":{"start":{"line":120,"column":0},"end":{"line":120,"column":78}}},"branchMap":{"1":{"line":19,"type":"binary-expr","locations":[{"start":{"line":19,"column":14},"end":{"line":19,"column":21}},{"start":{"line":19,"column":25},"end":{"line":19,"column":33}}]},"2":{"line":20,"type":"cond-expr","locations":[{"start":{"line":20,"column":38},"end":{"line":20,"column":42}},{"start":{"line":20,"column":45},"end":{"line":20,"column":63}}]},"3":{"line":29,"type":"binary-expr","locations":[{"start":{"line":29,"column":9},"end":{"line":29,"column":35}},{"start":{"line":29,"column":39},"end":{"line":29,"column":63}}]},"4":{"line":30,"type":"if","locations":[{"start":{"line":30,"column":4},"end":{"line":30,"column":4}},{"start":{"line":30,"column":4},"end":{"line":30,"column":4}}]},"5":{"line":34,"type":"if","locations":[{"start":{"line":34,"column":9},"end":{"line":34,"column":9}},{"start":{"line":34,"column":9},"end":{"line":34,"column":9}}]},"6":{"line":37,"type":"if","locations":[{"start":{"line":37,"column":9},"end":{"line":37,"column":9}},{"start":{"line":37,"column":9},"end":{"line":37,"column":9}}]},"7":{"line":40,"type":"if","locations":[{"start":{"line":40,"column":9},"end":{"line":40,"column":9}},{"start":{"line":40,"column":9},"end":{"line":40,"column":9}}]},"8":{"line":43,"type":"if","locations":[{"start":{"line":43,"column":9},"end":{"line":43,"column":9}},{"start":{"line":43,"column":9},"end":{"line":43,"column":9}}]},"9":{"line":48,"type":"if","locations":[{"start":{"line":48,"column":9},"end":{"line":48,"column":9}},{"start":{"line":48,"column":9},"end":{"line":48,"column":9}}]},"10":{"line":52,"type":"if","locations":[{"start":{"line":52,"column":9},"end":{"line":52,"column":9}},{"start":{"line":52,"column":9},"end":{"line":52,"column":9}}]},"11":{"line":61,"type":"if","locations":[{"start":{"line":61,"column":9},"end":{"line":61,"column":9}},{"start":{"line":61,"column":9},"end":{"line":61,"column":9}}]},"12":{"line":64,"type":"binary-expr","locations":[{"start":{"line":64,"column":8},"end":{"line":64,"column":25}},{"start":{"line":64,"column":30},"end":{"line":64,"column":74}}]},"13":{"line":71,"type":"if","locations":[{"start":{"line":71,"column":6},"end":{"line":71,"column":6}},{"start":{"line":71,"column":6},"end":{"line":71,"column":6}}]},"14":{"line":74,"type":"binary-expr","locations":[{"start":{"line":74,"column":10},"end":{"line":74,"column":27}},{"start":{"line":74,"column":32},"end":{"line":74,"column":76}}]},"15":{"line":83,"type":"binary-expr","locations":[{"start":{"line":83,"column":10},"end":{"line":83,"column":27}},{"start":{"line":83,"column":32},"end":{"line":83,"column":76}}]},"16":{"line":89,"type":"if","locations":[{"start":{"line":89,"column":2},"end":{"line":89,"column":2}},{"start":{"line":89,"column":2},"end":{"line":89,"column":2}}]},"17":{"line":90,"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":90,"column":4}},{"start":{"line":90,"column":4},"end":{"line":90,"column":4}}]},"18":{"line":92,"type":"cond-expr","locations":[{"start":{"line":92,"column":34},"end":{"line":92,"column":40}},{"start":{"line":92,"column":43},"end":{"line":92,"column":54}}]},"19":{"line":93,"type":"if","locations":[{"start":{"line":93,"column":6},"end":{"line":93,"column":6}},{"start":{"line":93,"column":6},"end":{"line":93,"column":6}}]},"20":{"line":106,"type":"binary-expr","locations":[{"start":{"line":106,"column":11},"end":{"line":106,"column":37}},{"start":{"line":106,"column":41},"end":{"line":106,"column":75}}]},"21":{"line":107,"type":"if","locations":[{"start":{"line":107,"column":4},"end":{"line":107,"column":4}},{"start":{"line":107,"column":4},"end":{"line":107,"column":4}}]}}}} \ No newline at end of file +{"/home/webreflection/code/domdiff/cjs/index.js":{"path":"/home/webreflection/code/domdiff/cjs/index.js","s":{"1":1,"2":528,"3":1,"4":98,"5":98,"6":98,"7":98,"8":98,"9":98,"10":98,"11":98,"12":98,"13":98,"14":447,"15":44,"16":403,"17":11,"18":392,"19":22,"20":370,"21":5,"22":365,"23":140,"24":140,"25":225,"26":50,"27":50,"28":175,"29":52,"30":52,"31":52,"32":123,"33":27,"34":27,"35":27,"36":96,"37":96,"38":52,"39":52,"40":44,"41":44,"42":44,"43":44,"44":98,"45":52,"46":31,"47":31,"48":31,"49":15,"50":16,"51":16,"52":48,"53":16,"54":46,"55":2,"56":46,"57":23,"58":23,"59":23,"60":23,"61":23,"62":98,"63":1},"b":{"1":[98,96],"2":[50,48],"3":[545,493],"4":[44,403],"5":[11,392],"6":[22,370],"7":[5,365],"8":[140,225],"9":[50,175],"10":[52,123],"11":[27,96],"12":[52,44],"13":[52,46],"14":[31,21],"15":[22,9],"16":[15,16],"17":[48,48],"18":[23,23]},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":10,"column":0},"end":{"line":10,"column":24}},"2":{"start":{"line":10,"column":22},"end":{"line":10,"column":23}},"3":{"start":{"line":12,"column":0},"end":{"line":114,"column":2}},"4":{"start":{"line":19,"column":2},"end":{"line":19,"column":34}},"5":{"start":{"line":20,"column":2},"end":{"line":20,"column":64}},"6":{"start":{"line":21,"column":2},"end":{"line":21,"column":40}},"7":{"start":{"line":22,"column":2},"end":{"line":22,"column":43}},"8":{"start":{"line":23,"column":2},"end":{"line":23,"column":41}},"9":{"start":{"line":24,"column":2},"end":{"line":24,"column":48}},"10":{"start":{"line":25,"column":2},"end":{"line":25,"column":41}},"11":{"start":{"line":26,"column":2},"end":{"line":26,"column":39}},"12":{"start":{"line":27,"column":2},"end":{"line":27,"column":45}},"13":{"start":{"line":28,"column":2},"end":{"line":84,"column":3}},"14":{"start":{"line":29,"column":4},"end":{"line":83,"column":5}},"15":{"start":{"line":30,"column":6},"end":{"line":30,"column":54}},"16":{"start":{"line":32,"column":9},"end":{"line":83,"column":5}},"17":{"start":{"line":33,"column":6},"end":{"line":33,"column":50}},"18":{"start":{"line":35,"column":9},"end":{"line":83,"column":5}},"19":{"start":{"line":36,"column":6},"end":{"line":36,"column":51}},"20":{"start":{"line":38,"column":9},"end":{"line":83,"column":5}},"21":{"start":{"line":39,"column":6},"end":{"line":39,"column":47}},"22":{"start":{"line":41,"column":9},"end":{"line":83,"column":5}},"23":{"start":{"line":42,"column":6},"end":{"line":42,"column":54}},"24":{"start":{"line":43,"column":6},"end":{"line":43,"column":51}},"25":{"start":{"line":45,"column":9},"end":{"line":83,"column":5}},"26":{"start":{"line":46,"column":6},"end":{"line":46,"column":50}},"27":{"start":{"line":47,"column":6},"end":{"line":47,"column":47}},"28":{"start":{"line":49,"column":9},"end":{"line":83,"column":5}},"29":{"start":{"line":50,"column":6},"end":{"line":53,"column":8}},"30":{"start":{"line":54,"column":6},"end":{"line":54,"column":54}},"31":{"start":{"line":55,"column":6},"end":{"line":55,"column":47}},"32":{"start":{"line":57,"column":9},"end":{"line":83,"column":5}},"33":{"start":{"line":58,"column":6},"end":{"line":61,"column":8}},"34":{"start":{"line":62,"column":6},"end":{"line":62,"column":50}},"35":{"start":{"line":63,"column":6},"end":{"line":63,"column":51}},"36":{"start":{"line":66,"column":6},"end":{"line":66,"column":56}},"37":{"start":{"line":67,"column":6},"end":{"line":82,"column":7}},"38":{"start":{"line":68,"column":8},"end":{"line":71,"column":10}},"39":{"start":{"line":72,"column":8},"end":{"line":72,"column":53}},"40":{"start":{"line":75,"column":8},"end":{"line":75,"column":37}},"41":{"start":{"line":76,"column":8},"end":{"line":76,"column":35}},"42":{"start":{"line":77,"column":8},"end":{"line":80,"column":10}},"43":{"start":{"line":81,"column":8},"end":{"line":81,"column":53}},"44":{"start":{"line":85,"column":2},"end":{"line":112,"column":3}},"45":{"start":{"line":86,"column":4},"end":{"line":99,"column":5}},"46":{"start":{"line":87,"column":6},"end":{"line":87,"column":45}},"47":{"start":{"line":88,"column":6},"end":{"line":88,"column":55}},"48":{"start":{"line":89,"column":6},"end":{"line":98,"column":7}},"49":{"start":{"line":90,"column":8},"end":{"line":90,"column":73}},"50":{"start":{"line":93,"column":8},"end":{"line":93,"column":75}},"51":{"start":{"line":94,"column":8},"end":{"line":96,"column":9}},"52":{"start":{"line":95,"column":10},"end":{"line":95,"column":67}},"53":{"start":{"line":97,"column":8},"end":{"line":97,"column":49}},"54":{"start":{"line":102,"column":4},"end":{"line":102,"column":92}},"55":{"start":{"line":102,"column":77},"end":{"line":102,"column":92}},"56":{"start":{"line":103,"column":4},"end":{"line":111,"column":5}},"57":{"start":{"line":104,"column":6},"end":{"line":104,"column":66}},"58":{"start":{"line":107,"column":6},"end":{"line":107,"column":59}},"59":{"start":{"line":108,"column":6},"end":{"line":108,"column":64}},"60":{"start":{"line":109,"column":6},"end":{"line":109,"column":59}},"61":{"start":{"line":110,"column":6},"end":{"line":110,"column":29}},"62":{"start":{"line":113,"column":2},"end":{"line":113,"column":21}},"63":{"start":{"line":116,"column":0},"end":{"line":116,"column":78}}},"branchMap":{"1":{"line":19,"type":"binary-expr","locations":[{"start":{"line":19,"column":14},"end":{"line":19,"column":21}},{"start":{"line":19,"column":25},"end":{"line":19,"column":33}}]},"2":{"line":20,"type":"cond-expr","locations":[{"start":{"line":20,"column":38},"end":{"line":20,"column":42}},{"start":{"line":20,"column":45},"end":{"line":20,"column":63}}]},"3":{"line":28,"type":"binary-expr","locations":[{"start":{"line":28,"column":9},"end":{"line":28,"column":35}},{"start":{"line":28,"column":39},"end":{"line":28,"column":63}}]},"4":{"line":29,"type":"if","locations":[{"start":{"line":29,"column":4},"end":{"line":29,"column":4}},{"start":{"line":29,"column":4},"end":{"line":29,"column":4}}]},"5":{"line":32,"type":"if","locations":[{"start":{"line":32,"column":9},"end":{"line":32,"column":9}},{"start":{"line":32,"column":9},"end":{"line":32,"column":9}}]},"6":{"line":35,"type":"if","locations":[{"start":{"line":35,"column":9},"end":{"line":35,"column":9}},{"start":{"line":35,"column":9},"end":{"line":35,"column":9}}]},"7":{"line":38,"type":"if","locations":[{"start":{"line":38,"column":9},"end":{"line":38,"column":9}},{"start":{"line":38,"column":9},"end":{"line":38,"column":9}}]},"8":{"line":41,"type":"if","locations":[{"start":{"line":41,"column":9},"end":{"line":41,"column":9}},{"start":{"line":41,"column":9},"end":{"line":41,"column":9}}]},"9":{"line":45,"type":"if","locations":[{"start":{"line":45,"column":9},"end":{"line":45,"column":9}},{"start":{"line":45,"column":9},"end":{"line":45,"column":9}}]},"10":{"line":49,"type":"if","locations":[{"start":{"line":49,"column":9},"end":{"line":49,"column":9}},{"start":{"line":49,"column":9},"end":{"line":49,"column":9}}]},"11":{"line":57,"type":"if","locations":[{"start":{"line":57,"column":9},"end":{"line":57,"column":9}},{"start":{"line":57,"column":9},"end":{"line":57,"column":9}}]},"12":{"line":67,"type":"if","locations":[{"start":{"line":67,"column":6},"end":{"line":67,"column":6}},{"start":{"line":67,"column":6},"end":{"line":67,"column":6}}]},"13":{"line":85,"type":"if","locations":[{"start":{"line":85,"column":2},"end":{"line":85,"column":2}},{"start":{"line":85,"column":2},"end":{"line":85,"column":2}}]},"14":{"line":86,"type":"if","locations":[{"start":{"line":86,"column":4},"end":{"line":86,"column":4}},{"start":{"line":86,"column":4},"end":{"line":86,"column":4}}]},"15":{"line":88,"type":"cond-expr","locations":[{"start":{"line":88,"column":34},"end":{"line":88,"column":40}},{"start":{"line":88,"column":43},"end":{"line":88,"column":54}}]},"16":{"line":89,"type":"if","locations":[{"start":{"line":89,"column":6},"end":{"line":89,"column":6}},{"start":{"line":89,"column":6},"end":{"line":89,"column":6}}]},"17":{"line":102,"type":"binary-expr","locations":[{"start":{"line":102,"column":11},"end":{"line":102,"column":37}},{"start":{"line":102,"column":41},"end":{"line":102,"column":75}}]},"18":{"line":103,"type":"if","locations":[{"start":{"line":103,"column":4},"end":{"line":103,"column":4}},{"start":{"line":103,"column":4},"end":{"line":103,"column":4}}]}}}} \ No newline at end of file diff --git a/coverage/lcov-report/cjs/index.html b/coverage/lcov-report/cjs/index.html index c43b5e3..c7b313d 100644 --- a/coverage/lcov-report/cjs/index.html +++ b/coverage/lcov-report/cjs/index.html @@ -22,12 +22,12 @@

100% Statements - 67/67 + 63/63
100% Branches - 42/42 + 36/36
100% @@ -37,7 +37,7 @@

100% Lines - 65/65 + 61/61

@@ -62,13 +62,13 @@

index.js
100% - 67/67 + 63/63 100% - 42/42 + 36/36 100% 0/0 100% - 65/65 + 61/61 @@ -77,7 +77,7 @@

diff --git a/coverage/lcov-report/cjs/index.js.html b/coverage/lcov-report/cjs/index.js.html index 46c76a1..5c65f5d 100644 --- a/coverage/lcov-report/cjs/index.js.html +++ b/coverage/lcov-report/cjs/index.js.html @@ -22,12 +22,12 @@

100% Statements - 67/67 + 63/63
100% Branches - 42/42 + 36/36
100% @@ -37,7 +37,7 @@

100% Lines - 65/65 + 61/61

@@ -159,11 +159,7 @@

114 115 116 -117 -118 -119 -120 -121  +117        @@ -172,7 +168,7 @@

      -467× +528×     @@ -191,10 +187,8 @@

98× 98× 98× -98× 447× 44× -44×   403× 11× @@ -208,7 +202,6 @@

365× 140× 140× -140×   225× 50× @@ -221,7 +214,6 @@

  52× 52× -52×   123× 27× @@ -305,7 +297,6 @@

const before = beforeNode == null ? null : get(beforeNode, 0); let currentStart = 0, futureStart = 0; let currentEnd = currentNodes.length - 1; - let currentStartNodeZ = null; let currentStartNode = currentNodes[0]; let currentEndNode = currentNodes[currentEnd]; let futureEnd = futureNodes.length - 1; @@ -313,7 +304,6 @@

let futureEndNode = futureNodes[futureEnd]; while (currentStart <= currentEnd && futureStart <= futureEnd) { if (currentStartNode == null) { - currentStartNodeZ = null; currentStartNode = currentNodes[++currentStart]; } else if (currentEndNode == null) { @@ -326,7 +316,6 @@

futureEndNode = futureNodes[--futureEnd]; } else if (currentStartNode == futureStartNode) { - currentStartNodeZ = null; currentStartNode = currentNodes[++currentStart]; futureStartNode = futureNodes[++futureStart]; } @@ -339,14 +328,13 @@

get(currentStartNode, 1), get(currentEndNode, -0).nextSibling ); - currentStartNodeZ = null; currentStartNode = currentNodes[++currentStart]; futureEndNode = futureNodes[--futureEnd]; } else if (currentEndNode == futureStartNode) { parentNode.insertBefore( get(currentEndNode, 1), - currentStartNodeZ || (currentStartNodeZ = get(currentStartNode, 0)) + get(currentStartNode, 0) ); currentEndNode = currentNodes[--currentEnd]; futureStartNode = futureNodes[++futureStart]; @@ -356,7 +344,7 @@

if (index < 0) { parentNode.insertBefore( get(futureStartNode, 1), - currentStartNodeZ || (currentStartNodeZ = get(currentStartNode, 0)) + get(currentStartNode, 0) ); futureStartNode = futureNodes[++futureStart]; } @@ -365,7 +353,7 @@

currentNodes[index] = null; parentNode.insertBefore( get(el, 1), - currentStartNodeZ || (currentStartNodeZ = get(currentStartNode, 0)) + get(currentStartNode, 0) ); futureStartNode = futureNodes[++futureStart]; } @@ -409,7 +397,7 @@

diff --git a/coverage/lcov-report/index.html b/coverage/lcov-report/index.html index 233baed..5f68ebd 100644 --- a/coverage/lcov-report/index.html +++ b/coverage/lcov-report/index.html @@ -22,12 +22,12 @@

100% Statements - 67/67 + 63/63
100% Branches - 42/42 + 36/36
100% @@ -37,7 +37,7 @@

100% Lines - 65/65 + 61/61

@@ -62,13 +62,13 @@

cjs/
100% - 67/67 + 63/63 100% - 42/42 + 36/36 100% 0/0 100% - 65/65 + 61/61 @@ -77,7 +77,7 @@

diff --git a/coverage/lcov.info b/coverage/lcov.info index 1ef403a..5611a5e 100644 --- a/coverage/lcov.info +++ b/coverage/lcov.info @@ -2,7 +2,7 @@ TN: SF:/home/webreflection/code/domdiff/cjs/index.js FNF:0 FNH:0 -DA:10,467 +DA:10,528 DA:12,1 DA:19,98 DA:20,98 @@ -14,103 +14,93 @@ DA:25,98 DA:26,98 DA:27,98 DA:28,98 -DA:29,98 -DA:30,447 -DA:31,44 -DA:32,44 -DA:34,403 -DA:35,11 -DA:37,392 -DA:38,22 -DA:40,370 -DA:41,5 -DA:43,365 -DA:44,140 -DA:45,140 -DA:46,140 -DA:48,225 -DA:49,50 -DA:50,50 -DA:52,175 -DA:53,52 -DA:57,52 -DA:58,52 -DA:59,52 -DA:61,123 +DA:29,447 +DA:30,44 +DA:32,403 +DA:33,11 +DA:35,392 +DA:36,22 +DA:38,370 +DA:39,5 +DA:41,365 +DA:42,140 +DA:43,140 +DA:45,225 +DA:46,50 +DA:47,50 +DA:49,175 +DA:50,52 +DA:54,52 +DA:55,52 +DA:57,123 +DA:58,27 DA:62,27 -DA:66,27 -DA:67,27 -DA:70,96 -DA:71,96 +DA:63,27 +DA:66,96 +DA:67,96 +DA:68,52 DA:72,52 -DA:76,52 -DA:79,44 -DA:80,44 +DA:75,44 +DA:76,44 +DA:77,44 DA:81,44 -DA:85,44 -DA:89,98 -DA:90,52 -DA:91,31 -DA:92,31 -DA:93,31 -DA:94,15 +DA:85,98 +DA:86,52 +DA:87,31 +DA:88,31 +DA:89,31 +DA:90,15 +DA:93,16 +DA:94,16 +DA:95,48 DA:97,16 -DA:98,16 -DA:99,48 -DA:101,16 -DA:106,46 -DA:107,46 +DA:102,46 +DA:103,46 +DA:104,23 +DA:107,23 DA:108,23 -DA:111,23 -DA:112,23 -DA:113,23 -DA:114,23 -DA:117,98 -DA:120,1 -LF:65 -LH:65 +DA:109,23 +DA:110,23 +DA:113,98 +DA:116,1 +LF:61 +LH:61 BRDA:19,1,0,98 BRDA:19,1,1,96 BRDA:20,2,0,50 BRDA:20,2,1,48 -BRDA:29,3,0,545 -BRDA:29,3,1,493 -BRDA:30,4,0,44 -BRDA:30,4,1,403 -BRDA:34,5,0,11 -BRDA:34,5,1,392 -BRDA:37,6,0,22 -BRDA:37,6,1,370 -BRDA:40,7,0,5 -BRDA:40,7,1,365 -BRDA:43,8,0,140 -BRDA:43,8,1,225 -BRDA:48,9,0,50 -BRDA:48,9,1,175 -BRDA:52,10,0,52 -BRDA:52,10,1,123 -BRDA:61,11,0,27 -BRDA:61,11,1,96 -BRDA:64,12,0,27 -BRDA:64,12,1,11 -BRDA:71,13,0,52 -BRDA:71,13,1,44 -BRDA:74,14,0,52 -BRDA:74,14,1,25 -BRDA:83,15,0,44 -BRDA:83,15,1,24 -BRDA:89,16,0,52 -BRDA:89,16,1,46 -BRDA:90,17,0,31 -BRDA:90,17,1,21 -BRDA:92,18,0,22 -BRDA:92,18,1,9 -BRDA:93,19,0,15 -BRDA:93,19,1,16 -BRDA:106,20,0,48 -BRDA:106,20,1,48 -BRDA:107,21,0,23 -BRDA:107,21,1,23 -BRF:42 -BRH:42 +BRDA:28,3,0,545 +BRDA:28,3,1,493 +BRDA:29,4,0,44 +BRDA:29,4,1,403 +BRDA:32,5,0,11 +BRDA:32,5,1,392 +BRDA:35,6,0,22 +BRDA:35,6,1,370 +BRDA:38,7,0,5 +BRDA:38,7,1,365 +BRDA:41,8,0,140 +BRDA:41,8,1,225 +BRDA:45,9,0,50 +BRDA:45,9,1,175 +BRDA:49,10,0,52 +BRDA:49,10,1,123 +BRDA:57,11,0,27 +BRDA:57,11,1,96 +BRDA:67,12,0,52 +BRDA:67,12,1,44 +BRDA:85,13,0,52 +BRDA:85,13,1,46 +BRDA:86,14,0,31 +BRDA:86,14,1,21 +BRDA:88,15,0,22 +BRDA:88,15,1,9 +BRDA:89,16,0,15 +BRDA:89,16,1,16 +BRDA:102,17,0,48 +BRDA:102,17,1,48 +BRDA:103,18,0,23 +BRDA:103,18,1,23 +BRF:36 +BRH:36 end_of_record diff --git a/esm/index.js b/esm/index.js index 8f65f60..9944147 100644 --- a/esm/index.js +++ b/esm/index.js @@ -19,7 +19,6 @@ const domdiff = ( const before = beforeNode == null ? null : get(beforeNode, 0); let currentStart = 0, futureStart = 0; let currentEnd = currentNodes.length - 1; - let currentStartNodeZ = null; let currentStartNode = currentNodes[0]; let currentEndNode = currentNodes[currentEnd]; let futureEnd = futureNodes.length - 1; @@ -27,7 +26,6 @@ const domdiff = ( let futureEndNode = futureNodes[futureEnd]; while (currentStart <= currentEnd && futureStart <= futureEnd) { if (currentStartNode == null) { - currentStartNodeZ = null; currentStartNode = currentNodes[++currentStart]; } else if (currentEndNode == null) { @@ -40,7 +38,6 @@ const domdiff = ( futureEndNode = futureNodes[--futureEnd]; } else if (currentStartNode == futureStartNode) { - currentStartNodeZ = null; currentStartNode = currentNodes[++currentStart]; futureStartNode = futureNodes[++futureStart]; } @@ -53,14 +50,13 @@ const domdiff = ( get(currentStartNode, 1), get(currentEndNode, -0).nextSibling ); - currentStartNodeZ = null; currentStartNode = currentNodes[++currentStart]; futureEndNode = futureNodes[--futureEnd]; } else if (currentEndNode == futureStartNode) { parentNode.insertBefore( get(currentEndNode, 1), - currentStartNodeZ || (currentStartNodeZ = get(currentStartNode, 0)) + get(currentStartNode, 0) ); currentEndNode = currentNodes[--currentEnd]; futureStartNode = futureNodes[++futureStart]; @@ -70,7 +66,7 @@ const domdiff = ( if (index < 0) { parentNode.insertBefore( get(futureStartNode, 1), - currentStartNodeZ || (currentStartNodeZ = get(currentStartNode, 0)) + get(currentStartNode, 0) ); futureStartNode = futureNodes[++futureStart]; } @@ -79,7 +75,7 @@ const domdiff = ( currentNodes[index] = null; parentNode.insertBefore( get(el, 1), - currentStartNodeZ || (currentStartNodeZ = get(currentStartNode, 0)) + get(currentStartNode, 0) ); futureStartNode = futureNodes[++futureStart]; } diff --git a/index.js b/index.js index 9bc16af..bff0b27 100644 --- a/index.js +++ b/index.js @@ -24,7 +24,6 @@ beforeNode // optional item/node to use as insertBefore delimiter var currentStart = 0, futureStart = 0; var currentEnd = currentNodes.length - 1; - var currentStartNodeZ = null; var currentStartNode = currentNodes[0]; var currentEndNode = currentNodes[currentEnd]; var futureEnd = futureNodes.length - 1; @@ -32,7 +31,6 @@ beforeNode // optional item/node to use as insertBefore delimiter var futureEndNode = futureNodes[futureEnd]; while (currentStart <= currentEnd && futureStart <= futureEnd) { if (currentStartNode == null) { - currentStartNodeZ = null; currentStartNode = currentNodes[++currentStart]; } else if (currentEndNode == null) { currentEndNode = currentNodes[--currentEnd]; @@ -41,7 +39,6 @@ beforeNode // optional item/node to use as insertBefore delimiter } else if (futureEndNode == null) { futureEndNode = futureNodes[--futureEnd]; } else if (currentStartNode == futureStartNode) { - currentStartNodeZ = null; currentStartNode = currentNodes[++currentStart]; futureStartNode = futureNodes[++futureStart]; } else if (currentEndNode == futureEndNode) { @@ -49,22 +46,21 @@ beforeNode // optional item/node to use as insertBefore delimiter futureEndNode = futureNodes[--futureEnd]; } else if (currentStartNode == futureEndNode) { parentNode.insertBefore(get(currentStartNode, 1), get(currentEndNode, -0).nextSibling); - currentStartNodeZ = null; currentStartNode = currentNodes[++currentStart]; futureEndNode = futureNodes[--futureEnd]; } else if (currentEndNode == futureStartNode) { - parentNode.insertBefore(get(currentEndNode, 1), currentStartNodeZ || (currentStartNodeZ = get(currentStartNode, 0))); + parentNode.insertBefore(get(currentEndNode, 1), get(currentStartNode, 0)); currentEndNode = currentNodes[--currentEnd]; futureStartNode = futureNodes[++futureStart]; } else { var index = currentNodes.indexOf(futureStartNode); if (index < 0) { - parentNode.insertBefore(get(futureStartNode, 1), currentStartNodeZ || (currentStartNodeZ = get(currentStartNode, 0))); + parentNode.insertBefore(get(futureStartNode, 1), get(currentStartNode, 0)); futureStartNode = futureNodes[++futureStart]; } else { var el = currentNodes[index]; currentNodes[index] = null; - parentNode.insertBefore(get(el, 1), currentStartNodeZ || (currentStartNodeZ = get(currentStartNode, 0))); + parentNode.insertBefore(get(el, 1), get(currentStartNode, 0)); futureStartNode = futureNodes[++futureStart]; } } diff --git a/min.js b/min.js index a610fb5..26d4e15 100644 --- a/min.js +++ b/min.js @@ -1,2 +1,2 @@ var domdiff=function(){"use strict";/*! (c) 2017 Andrea Giammarchi (ISC) */ -var e=function(e){return e};return function(l,n,r,t,f){for(var i=t||e,s=null==f?null:i(f,0),u=0,o=0,a=n.length-1,c=null,v=n[0],d=n[a],B=r.length-1,m=r[0],g=r[B];u<=a&&o<=B;)if(null==v)c=null,v=n[++u];else if(null==d)d=n[--a];else if(null==m)m=r[++o];else if(null==g)g=r[--B];else if(v==m)c=null,v=n[++u],m=r[++o];else if(d==g)d=n[--a],g=r[--B];else if(v==g)l.insertBefore(i(v,1),i(d,-0).nextSibling),c=null,v=n[++u],g=r[--B];else if(d==m)l.insertBefore(i(d,1),c||(c=i(v,0))),d=n[--a],m=r[++o];else{var h=n.indexOf(m);if(h<0)l.insertBefore(i(m,1),c||(c=i(v,0))),m=r[++o];else{var C=n[h];n[h]=null,l.insertBefore(i(C,1),c||(c=i(v,0))),m=r[++o]}}if(u>a){if(o<=B){var D=r[B+1],p=null==D?s:i(D,0);if(o===B)l.insertBefore(i(r[o],1),p);else{for(var w=l.ownerDocument.createDocumentFragment();o<=B;)w.appendChild(i(r[o++],1));l.insertBefore(w,p)}}}else{for(;u<=a&&null==n[u];)u++;if(u===a)l.removeChild(i(n[u],-1));else{var x=l.ownerDocument.createRange();x.setStartBefore(i(n[u],-1)),x.setEndAfter(i(n[a],-1)),x.deleteContents()}}return r}}(); \ No newline at end of file +var e=function(e){return e};return function(n,r,l,t,f){for(var i=t||e,s=null==f?null:i(f,0),o=0,u=0,a=r.length-1,c=r[0],v=r[a],d=l.length-1,B=l[0],m=l[d];o<=a&&u<=d;)if(null==c)c=r[++o];else if(null==v)v=r[--a];else if(null==B)B=l[++u];else if(null==m)m=l[--d];else if(c==B)c=r[++o],B=l[++u];else if(v==m)v=r[--a],m=l[--d];else if(c==m)n.insertBefore(i(c,1),i(v,-0).nextSibling),c=r[++o],m=l[--d];else if(v==B)n.insertBefore(i(v,1),i(c,0)),v=r[--a],B=l[++u];else{var g=r.indexOf(B);if(g<0)n.insertBefore(i(B,1),i(c,0)),B=l[++u];else{var h=r[g];r[g]=null,n.insertBefore(i(h,1),i(c,0)),B=l[++u]}}if(o>a){if(u<=d){var C=l[d+1],D=null==C?s:i(C,0);if(u===d)n.insertBefore(i(l[u],1),D);else{for(var p=n.ownerDocument.createDocumentFragment();u<=d;)p.appendChild(i(l[u++],1));n.insertBefore(p,D)}}}else{for(;o<=a&&null==r[o];)o++;if(o===a)n.removeChild(i(r[o],-1));else{var w=n.ownerDocument.createRange();w.setStartBefore(i(r[o],-1)),w.setEndAfter(i(r[a],-1)),w.deleteContents()}}return l}}(); \ No newline at end of file From b22c758b337ea5f022e8e177759fe519ca97b388 Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Wed, 6 Dec 2017 13:25:11 -0200 Subject: [PATCH 14/71] 0.3.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 121256d..8572749 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "domdiff", - "version": "0.3.0", + "version": "0.3.1", "description": "A fast and simple way to diff childNodes", "browser": "min.js", "main": "cjs/index.js", From c38033feb4e5f68560ad27b47c97444e1a87032f Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Wed, 6 Dec 2017 18:32:52 -0200 Subject: [PATCH 15/71] added more tests at the end --- coverage/coverage.json | 2 +- coverage/lcov-report/cjs/index.html | 2 +- coverage/lcov-report/cjs/index.js.html | 52 ++++++++--------- coverage/lcov-report/index.html | 2 +- coverage/lcov.info | 78 +++++++++++++------------- test/test.js | 28 ++++++++- 6 files changed, 95 insertions(+), 69 deletions(-) diff --git a/coverage/coverage.json b/coverage/coverage.json index b339fbe..9a3b981 100644 --- a/coverage/coverage.json +++ b/coverage/coverage.json @@ -1 +1 @@ -{"/home/webreflection/code/domdiff/cjs/index.js":{"path":"/home/webreflection/code/domdiff/cjs/index.js","s":{"1":1,"2":528,"3":1,"4":98,"5":98,"6":98,"7":98,"8":98,"9":98,"10":98,"11":98,"12":98,"13":98,"14":447,"15":44,"16":403,"17":11,"18":392,"19":22,"20":370,"21":5,"22":365,"23":140,"24":140,"25":225,"26":50,"27":50,"28":175,"29":52,"30":52,"31":52,"32":123,"33":27,"34":27,"35":27,"36":96,"37":96,"38":52,"39":52,"40":44,"41":44,"42":44,"43":44,"44":98,"45":52,"46":31,"47":31,"48":31,"49":15,"50":16,"51":16,"52":48,"53":16,"54":46,"55":2,"56":46,"57":23,"58":23,"59":23,"60":23,"61":23,"62":98,"63":1},"b":{"1":[98,96],"2":[50,48],"3":[545,493],"4":[44,403],"5":[11,392],"6":[22,370],"7":[5,365],"8":[140,225],"9":[50,175],"10":[52,123],"11":[27,96],"12":[52,44],"13":[52,46],"14":[31,21],"15":[22,9],"16":[15,16],"17":[48,48],"18":[23,23]},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":10,"column":0},"end":{"line":10,"column":24}},"2":{"start":{"line":10,"column":22},"end":{"line":10,"column":23}},"3":{"start":{"line":12,"column":0},"end":{"line":114,"column":2}},"4":{"start":{"line":19,"column":2},"end":{"line":19,"column":34}},"5":{"start":{"line":20,"column":2},"end":{"line":20,"column":64}},"6":{"start":{"line":21,"column":2},"end":{"line":21,"column":40}},"7":{"start":{"line":22,"column":2},"end":{"line":22,"column":43}},"8":{"start":{"line":23,"column":2},"end":{"line":23,"column":41}},"9":{"start":{"line":24,"column":2},"end":{"line":24,"column":48}},"10":{"start":{"line":25,"column":2},"end":{"line":25,"column":41}},"11":{"start":{"line":26,"column":2},"end":{"line":26,"column":39}},"12":{"start":{"line":27,"column":2},"end":{"line":27,"column":45}},"13":{"start":{"line":28,"column":2},"end":{"line":84,"column":3}},"14":{"start":{"line":29,"column":4},"end":{"line":83,"column":5}},"15":{"start":{"line":30,"column":6},"end":{"line":30,"column":54}},"16":{"start":{"line":32,"column":9},"end":{"line":83,"column":5}},"17":{"start":{"line":33,"column":6},"end":{"line":33,"column":50}},"18":{"start":{"line":35,"column":9},"end":{"line":83,"column":5}},"19":{"start":{"line":36,"column":6},"end":{"line":36,"column":51}},"20":{"start":{"line":38,"column":9},"end":{"line":83,"column":5}},"21":{"start":{"line":39,"column":6},"end":{"line":39,"column":47}},"22":{"start":{"line":41,"column":9},"end":{"line":83,"column":5}},"23":{"start":{"line":42,"column":6},"end":{"line":42,"column":54}},"24":{"start":{"line":43,"column":6},"end":{"line":43,"column":51}},"25":{"start":{"line":45,"column":9},"end":{"line":83,"column":5}},"26":{"start":{"line":46,"column":6},"end":{"line":46,"column":50}},"27":{"start":{"line":47,"column":6},"end":{"line":47,"column":47}},"28":{"start":{"line":49,"column":9},"end":{"line":83,"column":5}},"29":{"start":{"line":50,"column":6},"end":{"line":53,"column":8}},"30":{"start":{"line":54,"column":6},"end":{"line":54,"column":54}},"31":{"start":{"line":55,"column":6},"end":{"line":55,"column":47}},"32":{"start":{"line":57,"column":9},"end":{"line":83,"column":5}},"33":{"start":{"line":58,"column":6},"end":{"line":61,"column":8}},"34":{"start":{"line":62,"column":6},"end":{"line":62,"column":50}},"35":{"start":{"line":63,"column":6},"end":{"line":63,"column":51}},"36":{"start":{"line":66,"column":6},"end":{"line":66,"column":56}},"37":{"start":{"line":67,"column":6},"end":{"line":82,"column":7}},"38":{"start":{"line":68,"column":8},"end":{"line":71,"column":10}},"39":{"start":{"line":72,"column":8},"end":{"line":72,"column":53}},"40":{"start":{"line":75,"column":8},"end":{"line":75,"column":37}},"41":{"start":{"line":76,"column":8},"end":{"line":76,"column":35}},"42":{"start":{"line":77,"column":8},"end":{"line":80,"column":10}},"43":{"start":{"line":81,"column":8},"end":{"line":81,"column":53}},"44":{"start":{"line":85,"column":2},"end":{"line":112,"column":3}},"45":{"start":{"line":86,"column":4},"end":{"line":99,"column":5}},"46":{"start":{"line":87,"column":6},"end":{"line":87,"column":45}},"47":{"start":{"line":88,"column":6},"end":{"line":88,"column":55}},"48":{"start":{"line":89,"column":6},"end":{"line":98,"column":7}},"49":{"start":{"line":90,"column":8},"end":{"line":90,"column":73}},"50":{"start":{"line":93,"column":8},"end":{"line":93,"column":75}},"51":{"start":{"line":94,"column":8},"end":{"line":96,"column":9}},"52":{"start":{"line":95,"column":10},"end":{"line":95,"column":67}},"53":{"start":{"line":97,"column":8},"end":{"line":97,"column":49}},"54":{"start":{"line":102,"column":4},"end":{"line":102,"column":92}},"55":{"start":{"line":102,"column":77},"end":{"line":102,"column":92}},"56":{"start":{"line":103,"column":4},"end":{"line":111,"column":5}},"57":{"start":{"line":104,"column":6},"end":{"line":104,"column":66}},"58":{"start":{"line":107,"column":6},"end":{"line":107,"column":59}},"59":{"start":{"line":108,"column":6},"end":{"line":108,"column":64}},"60":{"start":{"line":109,"column":6},"end":{"line":109,"column":59}},"61":{"start":{"line":110,"column":6},"end":{"line":110,"column":29}},"62":{"start":{"line":113,"column":2},"end":{"line":113,"column":21}},"63":{"start":{"line":116,"column":0},"end":{"line":116,"column":78}}},"branchMap":{"1":{"line":19,"type":"binary-expr","locations":[{"start":{"line":19,"column":14},"end":{"line":19,"column":21}},{"start":{"line":19,"column":25},"end":{"line":19,"column":33}}]},"2":{"line":20,"type":"cond-expr","locations":[{"start":{"line":20,"column":38},"end":{"line":20,"column":42}},{"start":{"line":20,"column":45},"end":{"line":20,"column":63}}]},"3":{"line":28,"type":"binary-expr","locations":[{"start":{"line":28,"column":9},"end":{"line":28,"column":35}},{"start":{"line":28,"column":39},"end":{"line":28,"column":63}}]},"4":{"line":29,"type":"if","locations":[{"start":{"line":29,"column":4},"end":{"line":29,"column":4}},{"start":{"line":29,"column":4},"end":{"line":29,"column":4}}]},"5":{"line":32,"type":"if","locations":[{"start":{"line":32,"column":9},"end":{"line":32,"column":9}},{"start":{"line":32,"column":9},"end":{"line":32,"column":9}}]},"6":{"line":35,"type":"if","locations":[{"start":{"line":35,"column":9},"end":{"line":35,"column":9}},{"start":{"line":35,"column":9},"end":{"line":35,"column":9}}]},"7":{"line":38,"type":"if","locations":[{"start":{"line":38,"column":9},"end":{"line":38,"column":9}},{"start":{"line":38,"column":9},"end":{"line":38,"column":9}}]},"8":{"line":41,"type":"if","locations":[{"start":{"line":41,"column":9},"end":{"line":41,"column":9}},{"start":{"line":41,"column":9},"end":{"line":41,"column":9}}]},"9":{"line":45,"type":"if","locations":[{"start":{"line":45,"column":9},"end":{"line":45,"column":9}},{"start":{"line":45,"column":9},"end":{"line":45,"column":9}}]},"10":{"line":49,"type":"if","locations":[{"start":{"line":49,"column":9},"end":{"line":49,"column":9}},{"start":{"line":49,"column":9},"end":{"line":49,"column":9}}]},"11":{"line":57,"type":"if","locations":[{"start":{"line":57,"column":9},"end":{"line":57,"column":9}},{"start":{"line":57,"column":9},"end":{"line":57,"column":9}}]},"12":{"line":67,"type":"if","locations":[{"start":{"line":67,"column":6},"end":{"line":67,"column":6}},{"start":{"line":67,"column":6},"end":{"line":67,"column":6}}]},"13":{"line":85,"type":"if","locations":[{"start":{"line":85,"column":2},"end":{"line":85,"column":2}},{"start":{"line":85,"column":2},"end":{"line":85,"column":2}}]},"14":{"line":86,"type":"if","locations":[{"start":{"line":86,"column":4},"end":{"line":86,"column":4}},{"start":{"line":86,"column":4},"end":{"line":86,"column":4}}]},"15":{"line":88,"type":"cond-expr","locations":[{"start":{"line":88,"column":34},"end":{"line":88,"column":40}},{"start":{"line":88,"column":43},"end":{"line":88,"column":54}}]},"16":{"line":89,"type":"if","locations":[{"start":{"line":89,"column":6},"end":{"line":89,"column":6}},{"start":{"line":89,"column":6},"end":{"line":89,"column":6}}]},"17":{"line":102,"type":"binary-expr","locations":[{"start":{"line":102,"column":11},"end":{"line":102,"column":37}},{"start":{"line":102,"column":41},"end":{"line":102,"column":75}}]},"18":{"line":103,"type":"if","locations":[{"start":{"line":103,"column":4},"end":{"line":103,"column":4}},{"start":{"line":103,"column":4},"end":{"line":103,"column":4}}]}}}} \ No newline at end of file +{"/home/webreflection/code/domdiff/cjs/index.js":{"path":"/home/webreflection/code/domdiff/cjs/index.js","s":{"1":1,"2":532,"3":1,"4":101,"5":101,"6":101,"7":101,"8":101,"9":101,"10":101,"11":101,"12":101,"13":101,"14":447,"15":44,"16":403,"17":11,"18":392,"19":22,"20":370,"21":5,"22":365,"23":140,"24":140,"25":225,"26":50,"27":50,"28":175,"29":52,"30":52,"31":52,"32":123,"33":27,"34":27,"35":27,"36":96,"37":96,"38":52,"39":52,"40":44,"41":44,"42":44,"43":44,"44":101,"45":53,"46":32,"47":32,"48":32,"49":16,"50":16,"51":16,"52":48,"53":16,"54":48,"55":2,"56":48,"57":24,"58":24,"59":24,"60":24,"61":24,"62":101,"63":1},"b":{"1":[101,99],"2":[53,48],"3":[548,495],"4":[44,403],"5":[11,392],"6":[22,370],"7":[5,365],"8":[140,225],"9":[50,175],"10":[52,123],"11":[27,96],"12":[52,44],"13":[53,48],"14":[32,21],"15":[23,9],"16":[16,16],"17":[50,50],"18":[24,24]},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":10,"column":0},"end":{"line":10,"column":24}},"2":{"start":{"line":10,"column":22},"end":{"line":10,"column":23}},"3":{"start":{"line":12,"column":0},"end":{"line":114,"column":2}},"4":{"start":{"line":19,"column":2},"end":{"line":19,"column":34}},"5":{"start":{"line":20,"column":2},"end":{"line":20,"column":64}},"6":{"start":{"line":21,"column":2},"end":{"line":21,"column":40}},"7":{"start":{"line":22,"column":2},"end":{"line":22,"column":43}},"8":{"start":{"line":23,"column":2},"end":{"line":23,"column":41}},"9":{"start":{"line":24,"column":2},"end":{"line":24,"column":48}},"10":{"start":{"line":25,"column":2},"end":{"line":25,"column":41}},"11":{"start":{"line":26,"column":2},"end":{"line":26,"column":39}},"12":{"start":{"line":27,"column":2},"end":{"line":27,"column":45}},"13":{"start":{"line":28,"column":2},"end":{"line":84,"column":3}},"14":{"start":{"line":29,"column":4},"end":{"line":83,"column":5}},"15":{"start":{"line":30,"column":6},"end":{"line":30,"column":54}},"16":{"start":{"line":32,"column":9},"end":{"line":83,"column":5}},"17":{"start":{"line":33,"column":6},"end":{"line":33,"column":50}},"18":{"start":{"line":35,"column":9},"end":{"line":83,"column":5}},"19":{"start":{"line":36,"column":6},"end":{"line":36,"column":51}},"20":{"start":{"line":38,"column":9},"end":{"line":83,"column":5}},"21":{"start":{"line":39,"column":6},"end":{"line":39,"column":47}},"22":{"start":{"line":41,"column":9},"end":{"line":83,"column":5}},"23":{"start":{"line":42,"column":6},"end":{"line":42,"column":54}},"24":{"start":{"line":43,"column":6},"end":{"line":43,"column":51}},"25":{"start":{"line":45,"column":9},"end":{"line":83,"column":5}},"26":{"start":{"line":46,"column":6},"end":{"line":46,"column":50}},"27":{"start":{"line":47,"column":6},"end":{"line":47,"column":47}},"28":{"start":{"line":49,"column":9},"end":{"line":83,"column":5}},"29":{"start":{"line":50,"column":6},"end":{"line":53,"column":8}},"30":{"start":{"line":54,"column":6},"end":{"line":54,"column":54}},"31":{"start":{"line":55,"column":6},"end":{"line":55,"column":47}},"32":{"start":{"line":57,"column":9},"end":{"line":83,"column":5}},"33":{"start":{"line":58,"column":6},"end":{"line":61,"column":8}},"34":{"start":{"line":62,"column":6},"end":{"line":62,"column":50}},"35":{"start":{"line":63,"column":6},"end":{"line":63,"column":51}},"36":{"start":{"line":66,"column":6},"end":{"line":66,"column":56}},"37":{"start":{"line":67,"column":6},"end":{"line":82,"column":7}},"38":{"start":{"line":68,"column":8},"end":{"line":71,"column":10}},"39":{"start":{"line":72,"column":8},"end":{"line":72,"column":53}},"40":{"start":{"line":75,"column":8},"end":{"line":75,"column":37}},"41":{"start":{"line":76,"column":8},"end":{"line":76,"column":35}},"42":{"start":{"line":77,"column":8},"end":{"line":80,"column":10}},"43":{"start":{"line":81,"column":8},"end":{"line":81,"column":53}},"44":{"start":{"line":85,"column":2},"end":{"line":112,"column":3}},"45":{"start":{"line":86,"column":4},"end":{"line":99,"column":5}},"46":{"start":{"line":87,"column":6},"end":{"line":87,"column":45}},"47":{"start":{"line":88,"column":6},"end":{"line":88,"column":55}},"48":{"start":{"line":89,"column":6},"end":{"line":98,"column":7}},"49":{"start":{"line":90,"column":8},"end":{"line":90,"column":73}},"50":{"start":{"line":93,"column":8},"end":{"line":93,"column":75}},"51":{"start":{"line":94,"column":8},"end":{"line":96,"column":9}},"52":{"start":{"line":95,"column":10},"end":{"line":95,"column":67}},"53":{"start":{"line":97,"column":8},"end":{"line":97,"column":49}},"54":{"start":{"line":102,"column":4},"end":{"line":102,"column":92}},"55":{"start":{"line":102,"column":77},"end":{"line":102,"column":92}},"56":{"start":{"line":103,"column":4},"end":{"line":111,"column":5}},"57":{"start":{"line":104,"column":6},"end":{"line":104,"column":66}},"58":{"start":{"line":107,"column":6},"end":{"line":107,"column":59}},"59":{"start":{"line":108,"column":6},"end":{"line":108,"column":64}},"60":{"start":{"line":109,"column":6},"end":{"line":109,"column":59}},"61":{"start":{"line":110,"column":6},"end":{"line":110,"column":29}},"62":{"start":{"line":113,"column":2},"end":{"line":113,"column":21}},"63":{"start":{"line":116,"column":0},"end":{"line":116,"column":78}}},"branchMap":{"1":{"line":19,"type":"binary-expr","locations":[{"start":{"line":19,"column":14},"end":{"line":19,"column":21}},{"start":{"line":19,"column":25},"end":{"line":19,"column":33}}]},"2":{"line":20,"type":"cond-expr","locations":[{"start":{"line":20,"column":38},"end":{"line":20,"column":42}},{"start":{"line":20,"column":45},"end":{"line":20,"column":63}}]},"3":{"line":28,"type":"binary-expr","locations":[{"start":{"line":28,"column":9},"end":{"line":28,"column":35}},{"start":{"line":28,"column":39},"end":{"line":28,"column":63}}]},"4":{"line":29,"type":"if","locations":[{"start":{"line":29,"column":4},"end":{"line":29,"column":4}},{"start":{"line":29,"column":4},"end":{"line":29,"column":4}}]},"5":{"line":32,"type":"if","locations":[{"start":{"line":32,"column":9},"end":{"line":32,"column":9}},{"start":{"line":32,"column":9},"end":{"line":32,"column":9}}]},"6":{"line":35,"type":"if","locations":[{"start":{"line":35,"column":9},"end":{"line":35,"column":9}},{"start":{"line":35,"column":9},"end":{"line":35,"column":9}}]},"7":{"line":38,"type":"if","locations":[{"start":{"line":38,"column":9},"end":{"line":38,"column":9}},{"start":{"line":38,"column":9},"end":{"line":38,"column":9}}]},"8":{"line":41,"type":"if","locations":[{"start":{"line":41,"column":9},"end":{"line":41,"column":9}},{"start":{"line":41,"column":9},"end":{"line":41,"column":9}}]},"9":{"line":45,"type":"if","locations":[{"start":{"line":45,"column":9},"end":{"line":45,"column":9}},{"start":{"line":45,"column":9},"end":{"line":45,"column":9}}]},"10":{"line":49,"type":"if","locations":[{"start":{"line":49,"column":9},"end":{"line":49,"column":9}},{"start":{"line":49,"column":9},"end":{"line":49,"column":9}}]},"11":{"line":57,"type":"if","locations":[{"start":{"line":57,"column":9},"end":{"line":57,"column":9}},{"start":{"line":57,"column":9},"end":{"line":57,"column":9}}]},"12":{"line":67,"type":"if","locations":[{"start":{"line":67,"column":6},"end":{"line":67,"column":6}},{"start":{"line":67,"column":6},"end":{"line":67,"column":6}}]},"13":{"line":85,"type":"if","locations":[{"start":{"line":85,"column":2},"end":{"line":85,"column":2}},{"start":{"line":85,"column":2},"end":{"line":85,"column":2}}]},"14":{"line":86,"type":"if","locations":[{"start":{"line":86,"column":4},"end":{"line":86,"column":4}},{"start":{"line":86,"column":4},"end":{"line":86,"column":4}}]},"15":{"line":88,"type":"cond-expr","locations":[{"start":{"line":88,"column":34},"end":{"line":88,"column":40}},{"start":{"line":88,"column":43},"end":{"line":88,"column":54}}]},"16":{"line":89,"type":"if","locations":[{"start":{"line":89,"column":6},"end":{"line":89,"column":6}},{"start":{"line":89,"column":6},"end":{"line":89,"column":6}}]},"17":{"line":102,"type":"binary-expr","locations":[{"start":{"line":102,"column":11},"end":{"line":102,"column":37}},{"start":{"line":102,"column":41},"end":{"line":102,"column":75}}]},"18":{"line":103,"type":"if","locations":[{"start":{"line":103,"column":4},"end":{"line":103,"column":4}},{"start":{"line":103,"column":4},"end":{"line":103,"column":4}}]}}}} \ No newline at end of file diff --git a/coverage/lcov-report/cjs/index.html b/coverage/lcov-report/cjs/index.html index c7b313d..9cd8369 100644 --- a/coverage/lcov-report/cjs/index.html +++ b/coverage/lcov-report/cjs/index.html @@ -77,7 +77,7 @@

diff --git a/coverage/lcov-report/cjs/index.js.html b/coverage/lcov-report/cjs/index.js.html index 5c65f5d..4b56a33 100644 --- a/coverage/lcov-report/cjs/index.js.html +++ b/coverage/lcov-report/cjs/index.js.html @@ -168,7 +168,7 @@

      -528× +532×     @@ -177,16 +177,16 @@

      -98× -98× -98× -98× -98× -98× -98× -98× -98× -98× +101× +101× +101× +101× +101× +101× +101× +101× +101× +101× 447× 44×   @@ -243,12 +243,12 @@

      -98× -52× -31× -31× -31× -15× +101× +53× +32× +32× +32× +16×     16× @@ -260,18 +260,18 @@

      -46× -46× -23× +48× +48× +24×     -23× -23× -23× -23× +24× +24× +24× +24×     -98× +101×     @@ -397,7 +397,7 @@

diff --git a/coverage/lcov-report/index.html b/coverage/lcov-report/index.html index 5f68ebd..114ee6e 100644 --- a/coverage/lcov-report/index.html +++ b/coverage/lcov-report/index.html @@ -77,7 +77,7 @@

diff --git a/coverage/lcov.info b/coverage/lcov.info index 5611a5e..fbd23a2 100644 --- a/coverage/lcov.info +++ b/coverage/lcov.info @@ -2,18 +2,18 @@ TN: SF:/home/webreflection/code/domdiff/cjs/index.js FNF:0 FNH:0 -DA:10,528 +DA:10,532 DA:12,1 -DA:19,98 -DA:20,98 -DA:21,98 -DA:22,98 -DA:23,98 -DA:24,98 -DA:25,98 -DA:26,98 -DA:27,98 -DA:28,98 +DA:19,101 +DA:20,101 +DA:21,101 +DA:22,101 +DA:23,101 +DA:24,101 +DA:25,101 +DA:26,101 +DA:27,101 +DA:28,101 DA:29,447 DA:30,44 DA:32,403 @@ -44,33 +44,33 @@ DA:75,44 DA:76,44 DA:77,44 DA:81,44 -DA:85,98 -DA:86,52 -DA:87,31 -DA:88,31 -DA:89,31 -DA:90,15 +DA:85,101 +DA:86,53 +DA:87,32 +DA:88,32 +DA:89,32 +DA:90,16 DA:93,16 DA:94,16 DA:95,48 DA:97,16 -DA:102,46 -DA:103,46 -DA:104,23 -DA:107,23 -DA:108,23 -DA:109,23 -DA:110,23 -DA:113,98 +DA:102,48 +DA:103,48 +DA:104,24 +DA:107,24 +DA:108,24 +DA:109,24 +DA:110,24 +DA:113,101 DA:116,1 LF:61 LH:61 -BRDA:19,1,0,98 -BRDA:19,1,1,96 -BRDA:20,2,0,50 +BRDA:19,1,0,101 +BRDA:19,1,1,99 +BRDA:20,2,0,53 BRDA:20,2,1,48 -BRDA:28,3,0,545 -BRDA:28,3,1,493 +BRDA:28,3,0,548 +BRDA:28,3,1,495 BRDA:29,4,0,44 BRDA:29,4,1,403 BRDA:32,5,0,11 @@ -89,18 +89,18 @@ BRDA:57,11,0,27 BRDA:57,11,1,96 BRDA:67,12,0,52 BRDA:67,12,1,44 -BRDA:85,13,0,52 -BRDA:85,13,1,46 -BRDA:86,14,0,31 +BRDA:85,13,0,53 +BRDA:85,13,1,48 +BRDA:86,14,0,32 BRDA:86,14,1,21 -BRDA:88,15,0,22 +BRDA:88,15,0,23 BRDA:88,15,1,9 -BRDA:89,16,0,15 +BRDA:89,16,0,16 BRDA:89,16,1,16 -BRDA:102,17,0,48 -BRDA:102,17,1,48 -BRDA:103,18,0,23 -BRDA:103,18,1,23 +BRDA:102,17,0,50 +BRDA:102,17,1,50 +BRDA:103,18,0,24 +BRDA:103,18,1,24 BRF:36 BRH:36 end_of_record diff --git a/test/test.js b/test/test.js index 29b2646..4f8d3fa 100644 --- a/test/test.js +++ b/test/test.js @@ -6,6 +6,7 @@ var clean = function () { }; var compare = function (state, value) { assert( + state.length === value.length && value.split('').every(function (v, i) { return state[i] === nodes[v]; }), @@ -121,7 +122,10 @@ newState = domdiff( compare(newState, 'ghi'); document.body.insertBefore(nodes.f, nodes.g); -compare([].slice.call(document.body.childNodes), 'fghi'); +if ('onclick' in document.body) { + console.log('browser only'); + compare([].slice.call(document.body.childNodes), 'fghi'); +} clean(); document.body.insertBefore(nodes.k, null); @@ -897,4 +901,26 @@ newState = domdiff( ); compare(newState, 'fedcba'); +newState = domdiff( + document.body, + newState, + [] +); +compare(newState, ''); + +newState = domdiff( + document.body, + newState, + [nodes.a] +); +compare(newState, 'a'); + +newState = domdiff( + document.body, + newState, + [] +); +compare(newState, ''); + + tressa.end(); From ec171d54a67c21c130099a137c263cc0b72a9864 Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Thu, 7 Dec 2017 06:40:32 -0200 Subject: [PATCH 16/71] fine-tuning latest steps --- cjs/index.js | 2 +- coverage/coverage.json | 2 +- coverage/lcov-report/cjs/index.html | 2 +- coverage/lcov-report/cjs/index.js.html | 98 ++++++++--------- coverage/lcov-report/index.html | 2 +- coverage/lcov.info | 144 ++++++++++++------------- esm/index.js | 2 +- index.js | 5 +- min.js | 2 +- test/test.js | 39 +++++-- 10 files changed, 162 insertions(+), 136 deletions(-) diff --git a/cjs/index.js b/cjs/index.js index 256c91c..c6264ce 100644 --- a/cjs/index.js +++ b/cjs/index.js @@ -99,7 +99,7 @@ const domdiff = ( } } else { - while (currentStart <= currentEnd && currentNodes[currentStart] == null) currentStart++; + if (currentNodes[currentStart] == null) currentStart++; if (currentStart === currentEnd) { parentNode.removeChild(get(currentNodes[currentStart], -1)); } diff --git a/coverage/coverage.json b/coverage/coverage.json index 9a3b981..265a32f 100644 --- a/coverage/coverage.json +++ b/coverage/coverage.json @@ -1 +1 @@ -{"/home/webreflection/code/domdiff/cjs/index.js":{"path":"/home/webreflection/code/domdiff/cjs/index.js","s":{"1":1,"2":532,"3":1,"4":101,"5":101,"6":101,"7":101,"8":101,"9":101,"10":101,"11":101,"12":101,"13":101,"14":447,"15":44,"16":403,"17":11,"18":392,"19":22,"20":370,"21":5,"22":365,"23":140,"24":140,"25":225,"26":50,"27":50,"28":175,"29":52,"30":52,"31":52,"32":123,"33":27,"34":27,"35":27,"36":96,"37":96,"38":52,"39":52,"40":44,"41":44,"42":44,"43":44,"44":101,"45":53,"46":32,"47":32,"48":32,"49":16,"50":16,"51":16,"52":48,"53":16,"54":48,"55":2,"56":48,"57":24,"58":24,"59":24,"60":24,"61":24,"62":101,"63":1},"b":{"1":[101,99],"2":[53,48],"3":[548,495],"4":[44,403],"5":[11,392],"6":[22,370],"7":[5,365],"8":[140,225],"9":[50,175],"10":[52,123],"11":[27,96],"12":[52,44],"13":[53,48],"14":[32,21],"15":[23,9],"16":[16,16],"17":[50,50],"18":[24,24]},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":10,"column":0},"end":{"line":10,"column":24}},"2":{"start":{"line":10,"column":22},"end":{"line":10,"column":23}},"3":{"start":{"line":12,"column":0},"end":{"line":114,"column":2}},"4":{"start":{"line":19,"column":2},"end":{"line":19,"column":34}},"5":{"start":{"line":20,"column":2},"end":{"line":20,"column":64}},"6":{"start":{"line":21,"column":2},"end":{"line":21,"column":40}},"7":{"start":{"line":22,"column":2},"end":{"line":22,"column":43}},"8":{"start":{"line":23,"column":2},"end":{"line":23,"column":41}},"9":{"start":{"line":24,"column":2},"end":{"line":24,"column":48}},"10":{"start":{"line":25,"column":2},"end":{"line":25,"column":41}},"11":{"start":{"line":26,"column":2},"end":{"line":26,"column":39}},"12":{"start":{"line":27,"column":2},"end":{"line":27,"column":45}},"13":{"start":{"line":28,"column":2},"end":{"line":84,"column":3}},"14":{"start":{"line":29,"column":4},"end":{"line":83,"column":5}},"15":{"start":{"line":30,"column":6},"end":{"line":30,"column":54}},"16":{"start":{"line":32,"column":9},"end":{"line":83,"column":5}},"17":{"start":{"line":33,"column":6},"end":{"line":33,"column":50}},"18":{"start":{"line":35,"column":9},"end":{"line":83,"column":5}},"19":{"start":{"line":36,"column":6},"end":{"line":36,"column":51}},"20":{"start":{"line":38,"column":9},"end":{"line":83,"column":5}},"21":{"start":{"line":39,"column":6},"end":{"line":39,"column":47}},"22":{"start":{"line":41,"column":9},"end":{"line":83,"column":5}},"23":{"start":{"line":42,"column":6},"end":{"line":42,"column":54}},"24":{"start":{"line":43,"column":6},"end":{"line":43,"column":51}},"25":{"start":{"line":45,"column":9},"end":{"line":83,"column":5}},"26":{"start":{"line":46,"column":6},"end":{"line":46,"column":50}},"27":{"start":{"line":47,"column":6},"end":{"line":47,"column":47}},"28":{"start":{"line":49,"column":9},"end":{"line":83,"column":5}},"29":{"start":{"line":50,"column":6},"end":{"line":53,"column":8}},"30":{"start":{"line":54,"column":6},"end":{"line":54,"column":54}},"31":{"start":{"line":55,"column":6},"end":{"line":55,"column":47}},"32":{"start":{"line":57,"column":9},"end":{"line":83,"column":5}},"33":{"start":{"line":58,"column":6},"end":{"line":61,"column":8}},"34":{"start":{"line":62,"column":6},"end":{"line":62,"column":50}},"35":{"start":{"line":63,"column":6},"end":{"line":63,"column":51}},"36":{"start":{"line":66,"column":6},"end":{"line":66,"column":56}},"37":{"start":{"line":67,"column":6},"end":{"line":82,"column":7}},"38":{"start":{"line":68,"column":8},"end":{"line":71,"column":10}},"39":{"start":{"line":72,"column":8},"end":{"line":72,"column":53}},"40":{"start":{"line":75,"column":8},"end":{"line":75,"column":37}},"41":{"start":{"line":76,"column":8},"end":{"line":76,"column":35}},"42":{"start":{"line":77,"column":8},"end":{"line":80,"column":10}},"43":{"start":{"line":81,"column":8},"end":{"line":81,"column":53}},"44":{"start":{"line":85,"column":2},"end":{"line":112,"column":3}},"45":{"start":{"line":86,"column":4},"end":{"line":99,"column":5}},"46":{"start":{"line":87,"column":6},"end":{"line":87,"column":45}},"47":{"start":{"line":88,"column":6},"end":{"line":88,"column":55}},"48":{"start":{"line":89,"column":6},"end":{"line":98,"column":7}},"49":{"start":{"line":90,"column":8},"end":{"line":90,"column":73}},"50":{"start":{"line":93,"column":8},"end":{"line":93,"column":75}},"51":{"start":{"line":94,"column":8},"end":{"line":96,"column":9}},"52":{"start":{"line":95,"column":10},"end":{"line":95,"column":67}},"53":{"start":{"line":97,"column":8},"end":{"line":97,"column":49}},"54":{"start":{"line":102,"column":4},"end":{"line":102,"column":92}},"55":{"start":{"line":102,"column":77},"end":{"line":102,"column":92}},"56":{"start":{"line":103,"column":4},"end":{"line":111,"column":5}},"57":{"start":{"line":104,"column":6},"end":{"line":104,"column":66}},"58":{"start":{"line":107,"column":6},"end":{"line":107,"column":59}},"59":{"start":{"line":108,"column":6},"end":{"line":108,"column":64}},"60":{"start":{"line":109,"column":6},"end":{"line":109,"column":59}},"61":{"start":{"line":110,"column":6},"end":{"line":110,"column":29}},"62":{"start":{"line":113,"column":2},"end":{"line":113,"column":21}},"63":{"start":{"line":116,"column":0},"end":{"line":116,"column":78}}},"branchMap":{"1":{"line":19,"type":"binary-expr","locations":[{"start":{"line":19,"column":14},"end":{"line":19,"column":21}},{"start":{"line":19,"column":25},"end":{"line":19,"column":33}}]},"2":{"line":20,"type":"cond-expr","locations":[{"start":{"line":20,"column":38},"end":{"line":20,"column":42}},{"start":{"line":20,"column":45},"end":{"line":20,"column":63}}]},"3":{"line":28,"type":"binary-expr","locations":[{"start":{"line":28,"column":9},"end":{"line":28,"column":35}},{"start":{"line":28,"column":39},"end":{"line":28,"column":63}}]},"4":{"line":29,"type":"if","locations":[{"start":{"line":29,"column":4},"end":{"line":29,"column":4}},{"start":{"line":29,"column":4},"end":{"line":29,"column":4}}]},"5":{"line":32,"type":"if","locations":[{"start":{"line":32,"column":9},"end":{"line":32,"column":9}},{"start":{"line":32,"column":9},"end":{"line":32,"column":9}}]},"6":{"line":35,"type":"if","locations":[{"start":{"line":35,"column":9},"end":{"line":35,"column":9}},{"start":{"line":35,"column":9},"end":{"line":35,"column":9}}]},"7":{"line":38,"type":"if","locations":[{"start":{"line":38,"column":9},"end":{"line":38,"column":9}},{"start":{"line":38,"column":9},"end":{"line":38,"column":9}}]},"8":{"line":41,"type":"if","locations":[{"start":{"line":41,"column":9},"end":{"line":41,"column":9}},{"start":{"line":41,"column":9},"end":{"line":41,"column":9}}]},"9":{"line":45,"type":"if","locations":[{"start":{"line":45,"column":9},"end":{"line":45,"column":9}},{"start":{"line":45,"column":9},"end":{"line":45,"column":9}}]},"10":{"line":49,"type":"if","locations":[{"start":{"line":49,"column":9},"end":{"line":49,"column":9}},{"start":{"line":49,"column":9},"end":{"line":49,"column":9}}]},"11":{"line":57,"type":"if","locations":[{"start":{"line":57,"column":9},"end":{"line":57,"column":9}},{"start":{"line":57,"column":9},"end":{"line":57,"column":9}}]},"12":{"line":67,"type":"if","locations":[{"start":{"line":67,"column":6},"end":{"line":67,"column":6}},{"start":{"line":67,"column":6},"end":{"line":67,"column":6}}]},"13":{"line":85,"type":"if","locations":[{"start":{"line":85,"column":2},"end":{"line":85,"column":2}},{"start":{"line":85,"column":2},"end":{"line":85,"column":2}}]},"14":{"line":86,"type":"if","locations":[{"start":{"line":86,"column":4},"end":{"line":86,"column":4}},{"start":{"line":86,"column":4},"end":{"line":86,"column":4}}]},"15":{"line":88,"type":"cond-expr","locations":[{"start":{"line":88,"column":34},"end":{"line":88,"column":40}},{"start":{"line":88,"column":43},"end":{"line":88,"column":54}}]},"16":{"line":89,"type":"if","locations":[{"start":{"line":89,"column":6},"end":{"line":89,"column":6}},{"start":{"line":89,"column":6},"end":{"line":89,"column":6}}]},"17":{"line":102,"type":"binary-expr","locations":[{"start":{"line":102,"column":11},"end":{"line":102,"column":37}},{"start":{"line":102,"column":41},"end":{"line":102,"column":75}}]},"18":{"line":103,"type":"if","locations":[{"start":{"line":103,"column":4},"end":{"line":103,"column":4}},{"start":{"line":103,"column":4},"end":{"line":103,"column":4}}]}}}} \ No newline at end of file +{"/home/webreflection/code/domdiff/cjs/index.js":{"path":"/home/webreflection/code/domdiff/cjs/index.js","s":{"1":1,"2":559,"3":1,"4":104,"5":104,"6":104,"7":104,"8":104,"9":104,"10":104,"11":104,"12":104,"13":104,"14":462,"15":44,"16":418,"17":12,"18":406,"19":22,"20":384,"21":5,"22":379,"23":142,"24":142,"25":237,"26":52,"27":52,"28":185,"29":55,"30":55,"31":55,"32":130,"33":28,"34":28,"35":28,"36":102,"37":102,"38":57,"39":57,"40":45,"41":45,"42":45,"43":45,"44":104,"45":53,"46":32,"47":32,"48":32,"49":16,"50":16,"51":16,"52":48,"53":16,"54":51,"55":2,"56":51,"57":26,"58":25,"59":25,"60":25,"61":25,"62":104,"63":1},"b":{"1":[104,102],"2":[53,51],"3":[566,513],"4":[44,418],"5":[12,406],"6":[22,384],"7":[5,379],"8":[142,237],"9":[52,185],"10":[55,130],"11":[28,102],"12":[57,45],"13":[53,51],"14":[32,21],"15":[23,9],"16":[16,16],"17":[2,49],"18":[26,25]},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":10,"column":0},"end":{"line":10,"column":24}},"2":{"start":{"line":10,"column":22},"end":{"line":10,"column":23}},"3":{"start":{"line":12,"column":0},"end":{"line":114,"column":2}},"4":{"start":{"line":19,"column":2},"end":{"line":19,"column":34}},"5":{"start":{"line":20,"column":2},"end":{"line":20,"column":64}},"6":{"start":{"line":21,"column":2},"end":{"line":21,"column":40}},"7":{"start":{"line":22,"column":2},"end":{"line":22,"column":43}},"8":{"start":{"line":23,"column":2},"end":{"line":23,"column":41}},"9":{"start":{"line":24,"column":2},"end":{"line":24,"column":48}},"10":{"start":{"line":25,"column":2},"end":{"line":25,"column":41}},"11":{"start":{"line":26,"column":2},"end":{"line":26,"column":39}},"12":{"start":{"line":27,"column":2},"end":{"line":27,"column":45}},"13":{"start":{"line":28,"column":2},"end":{"line":84,"column":3}},"14":{"start":{"line":29,"column":4},"end":{"line":83,"column":5}},"15":{"start":{"line":30,"column":6},"end":{"line":30,"column":54}},"16":{"start":{"line":32,"column":9},"end":{"line":83,"column":5}},"17":{"start":{"line":33,"column":6},"end":{"line":33,"column":50}},"18":{"start":{"line":35,"column":9},"end":{"line":83,"column":5}},"19":{"start":{"line":36,"column":6},"end":{"line":36,"column":51}},"20":{"start":{"line":38,"column":9},"end":{"line":83,"column":5}},"21":{"start":{"line":39,"column":6},"end":{"line":39,"column":47}},"22":{"start":{"line":41,"column":9},"end":{"line":83,"column":5}},"23":{"start":{"line":42,"column":6},"end":{"line":42,"column":54}},"24":{"start":{"line":43,"column":6},"end":{"line":43,"column":51}},"25":{"start":{"line":45,"column":9},"end":{"line":83,"column":5}},"26":{"start":{"line":46,"column":6},"end":{"line":46,"column":50}},"27":{"start":{"line":47,"column":6},"end":{"line":47,"column":47}},"28":{"start":{"line":49,"column":9},"end":{"line":83,"column":5}},"29":{"start":{"line":50,"column":6},"end":{"line":53,"column":8}},"30":{"start":{"line":54,"column":6},"end":{"line":54,"column":54}},"31":{"start":{"line":55,"column":6},"end":{"line":55,"column":47}},"32":{"start":{"line":57,"column":9},"end":{"line":83,"column":5}},"33":{"start":{"line":58,"column":6},"end":{"line":61,"column":8}},"34":{"start":{"line":62,"column":6},"end":{"line":62,"column":50}},"35":{"start":{"line":63,"column":6},"end":{"line":63,"column":51}},"36":{"start":{"line":66,"column":6},"end":{"line":66,"column":56}},"37":{"start":{"line":67,"column":6},"end":{"line":82,"column":7}},"38":{"start":{"line":68,"column":8},"end":{"line":71,"column":10}},"39":{"start":{"line":72,"column":8},"end":{"line":72,"column":53}},"40":{"start":{"line":75,"column":8},"end":{"line":75,"column":37}},"41":{"start":{"line":76,"column":8},"end":{"line":76,"column":35}},"42":{"start":{"line":77,"column":8},"end":{"line":80,"column":10}},"43":{"start":{"line":81,"column":8},"end":{"line":81,"column":53}},"44":{"start":{"line":85,"column":2},"end":{"line":112,"column":3}},"45":{"start":{"line":86,"column":4},"end":{"line":99,"column":5}},"46":{"start":{"line":87,"column":6},"end":{"line":87,"column":45}},"47":{"start":{"line":88,"column":6},"end":{"line":88,"column":55}},"48":{"start":{"line":89,"column":6},"end":{"line":98,"column":7}},"49":{"start":{"line":90,"column":8},"end":{"line":90,"column":73}},"50":{"start":{"line":93,"column":8},"end":{"line":93,"column":75}},"51":{"start":{"line":94,"column":8},"end":{"line":96,"column":9}},"52":{"start":{"line":95,"column":10},"end":{"line":95,"column":67}},"53":{"start":{"line":97,"column":8},"end":{"line":97,"column":49}},"54":{"start":{"line":102,"column":4},"end":{"line":102,"column":59}},"55":{"start":{"line":102,"column":44},"end":{"line":102,"column":59}},"56":{"start":{"line":103,"column":4},"end":{"line":111,"column":5}},"57":{"start":{"line":104,"column":6},"end":{"line":104,"column":66}},"58":{"start":{"line":107,"column":6},"end":{"line":107,"column":59}},"59":{"start":{"line":108,"column":6},"end":{"line":108,"column":64}},"60":{"start":{"line":109,"column":6},"end":{"line":109,"column":59}},"61":{"start":{"line":110,"column":6},"end":{"line":110,"column":29}},"62":{"start":{"line":113,"column":2},"end":{"line":113,"column":21}},"63":{"start":{"line":116,"column":0},"end":{"line":116,"column":78}}},"branchMap":{"1":{"line":19,"type":"binary-expr","locations":[{"start":{"line":19,"column":14},"end":{"line":19,"column":21}},{"start":{"line":19,"column":25},"end":{"line":19,"column":33}}]},"2":{"line":20,"type":"cond-expr","locations":[{"start":{"line":20,"column":38},"end":{"line":20,"column":42}},{"start":{"line":20,"column":45},"end":{"line":20,"column":63}}]},"3":{"line":28,"type":"binary-expr","locations":[{"start":{"line":28,"column":9},"end":{"line":28,"column":35}},{"start":{"line":28,"column":39},"end":{"line":28,"column":63}}]},"4":{"line":29,"type":"if","locations":[{"start":{"line":29,"column":4},"end":{"line":29,"column":4}},{"start":{"line":29,"column":4},"end":{"line":29,"column":4}}]},"5":{"line":32,"type":"if","locations":[{"start":{"line":32,"column":9},"end":{"line":32,"column":9}},{"start":{"line":32,"column":9},"end":{"line":32,"column":9}}]},"6":{"line":35,"type":"if","locations":[{"start":{"line":35,"column":9},"end":{"line":35,"column":9}},{"start":{"line":35,"column":9},"end":{"line":35,"column":9}}]},"7":{"line":38,"type":"if","locations":[{"start":{"line":38,"column":9},"end":{"line":38,"column":9}},{"start":{"line":38,"column":9},"end":{"line":38,"column":9}}]},"8":{"line":41,"type":"if","locations":[{"start":{"line":41,"column":9},"end":{"line":41,"column":9}},{"start":{"line":41,"column":9},"end":{"line":41,"column":9}}]},"9":{"line":45,"type":"if","locations":[{"start":{"line":45,"column":9},"end":{"line":45,"column":9}},{"start":{"line":45,"column":9},"end":{"line":45,"column":9}}]},"10":{"line":49,"type":"if","locations":[{"start":{"line":49,"column":9},"end":{"line":49,"column":9}},{"start":{"line":49,"column":9},"end":{"line":49,"column":9}}]},"11":{"line":57,"type":"if","locations":[{"start":{"line":57,"column":9},"end":{"line":57,"column":9}},{"start":{"line":57,"column":9},"end":{"line":57,"column":9}}]},"12":{"line":67,"type":"if","locations":[{"start":{"line":67,"column":6},"end":{"line":67,"column":6}},{"start":{"line":67,"column":6},"end":{"line":67,"column":6}}]},"13":{"line":85,"type":"if","locations":[{"start":{"line":85,"column":2},"end":{"line":85,"column":2}},{"start":{"line":85,"column":2},"end":{"line":85,"column":2}}]},"14":{"line":86,"type":"if","locations":[{"start":{"line":86,"column":4},"end":{"line":86,"column":4}},{"start":{"line":86,"column":4},"end":{"line":86,"column":4}}]},"15":{"line":88,"type":"cond-expr","locations":[{"start":{"line":88,"column":34},"end":{"line":88,"column":40}},{"start":{"line":88,"column":43},"end":{"line":88,"column":54}}]},"16":{"line":89,"type":"if","locations":[{"start":{"line":89,"column":6},"end":{"line":89,"column":6}},{"start":{"line":89,"column":6},"end":{"line":89,"column":6}}]},"17":{"line":102,"type":"if","locations":[{"start":{"line":102,"column":4},"end":{"line":102,"column":4}},{"start":{"line":102,"column":4},"end":{"line":102,"column":4}}]},"18":{"line":103,"type":"if","locations":[{"start":{"line":103,"column":4},"end":{"line":103,"column":4}},{"start":{"line":103,"column":4},"end":{"line":103,"column":4}}]}}}} \ No newline at end of file diff --git a/coverage/lcov-report/cjs/index.html b/coverage/lcov-report/cjs/index.html index 9cd8369..2ce9432 100644 --- a/coverage/lcov-report/cjs/index.html +++ b/coverage/lcov-report/cjs/index.html @@ -77,7 +77,7 @@

diff --git a/coverage/lcov-report/cjs/index.js.html b/coverage/lcov-report/cjs/index.js.html index 4b56a33..a82018a 100644 --- a/coverage/lcov-report/cjs/index.js.html +++ b/coverage/lcov-report/cjs/index.js.html @@ -168,7 +168,7 @@

      -532× +559×     @@ -177,73 +177,73 @@

      -101× -101× -101× -101× -101× -101× -101× -101× -101× -101× -447× +104× +104× +104× +104× +104× +104× +104× +104× +104× +104× +462× 44×   -403× -11× +418× +12×   -392× +406× 22×   -370× +384×   -365× -140× -140× +379× +142× +142×   -225× -50× -50× -  -175× +237× +52× 52×   +185× +55×     -52× -52×   -123× -27× +55× +55×   +130× +28×     -27× -27×   +28× +28×   -96× -96× -52×   +102× +102× +57×     -52×   +57×   -44× -44× -44×   +45× +45× +45×     -44×   +45×     -101× +  +104× 53× 32× 32× @@ -260,18 +260,18 @@

      -48× -48× -24× +51× +51× +26×     -24× -24× -24× -24× +25× +25× +25× +25×     -101× +104×     @@ -376,7 +376,7 @@

} } else { - while (currentStart <= currentEnd && currentNodes[currentStart] == null) currentStart++; + if (currentNodes[currentStart] == null) currentStart++; if (currentStart === currentEnd) { parentNode.removeChild(get(currentNodes[currentStart], -1)); } @@ -397,7 +397,7 @@

diff --git a/coverage/lcov-report/index.html b/coverage/lcov-report/index.html index 114ee6e..fef6da5 100644 --- a/coverage/lcov-report/index.html +++ b/coverage/lcov-report/index.html @@ -77,7 +77,7 @@

diff --git a/coverage/lcov.info b/coverage/lcov.info index fbd23a2..c6d5f3e 100644 --- a/coverage/lcov.info +++ b/coverage/lcov.info @@ -2,49 +2,49 @@ TN: SF:/home/webreflection/code/domdiff/cjs/index.js FNF:0 FNH:0 -DA:10,532 +DA:10,559 DA:12,1 -DA:19,101 -DA:20,101 -DA:21,101 -DA:22,101 -DA:23,101 -DA:24,101 -DA:25,101 -DA:26,101 -DA:27,101 -DA:28,101 -DA:29,447 +DA:19,104 +DA:20,104 +DA:21,104 +DA:22,104 +DA:23,104 +DA:24,104 +DA:25,104 +DA:26,104 +DA:27,104 +DA:28,104 +DA:29,462 DA:30,44 -DA:32,403 -DA:33,11 -DA:35,392 +DA:32,418 +DA:33,12 +DA:35,406 DA:36,22 -DA:38,370 +DA:38,384 DA:39,5 -DA:41,365 -DA:42,140 -DA:43,140 -DA:45,225 -DA:46,50 -DA:47,50 -DA:49,175 -DA:50,52 -DA:54,52 -DA:55,52 -DA:57,123 -DA:58,27 -DA:62,27 -DA:63,27 -DA:66,96 -DA:67,96 -DA:68,52 -DA:72,52 -DA:75,44 -DA:76,44 -DA:77,44 -DA:81,44 -DA:85,101 +DA:41,379 +DA:42,142 +DA:43,142 +DA:45,237 +DA:46,52 +DA:47,52 +DA:49,185 +DA:50,55 +DA:54,55 +DA:55,55 +DA:57,130 +DA:58,28 +DA:62,28 +DA:63,28 +DA:66,102 +DA:67,102 +DA:68,57 +DA:72,57 +DA:75,45 +DA:76,45 +DA:77,45 +DA:81,45 +DA:85,104 DA:86,53 DA:87,32 DA:88,32 @@ -54,53 +54,53 @@ DA:93,16 DA:94,16 DA:95,48 DA:97,16 -DA:102,48 -DA:103,48 -DA:104,24 -DA:107,24 -DA:108,24 -DA:109,24 -DA:110,24 -DA:113,101 +DA:102,51 +DA:103,51 +DA:104,26 +DA:107,25 +DA:108,25 +DA:109,25 +DA:110,25 +DA:113,104 DA:116,1 LF:61 LH:61 -BRDA:19,1,0,101 -BRDA:19,1,1,99 +BRDA:19,1,0,104 +BRDA:19,1,1,102 BRDA:20,2,0,53 -BRDA:20,2,1,48 -BRDA:28,3,0,548 -BRDA:28,3,1,495 +BRDA:20,2,1,51 +BRDA:28,3,0,566 +BRDA:28,3,1,513 BRDA:29,4,0,44 -BRDA:29,4,1,403 -BRDA:32,5,0,11 -BRDA:32,5,1,392 +BRDA:29,4,1,418 +BRDA:32,5,0,12 +BRDA:32,5,1,406 BRDA:35,6,0,22 -BRDA:35,6,1,370 +BRDA:35,6,1,384 BRDA:38,7,0,5 -BRDA:38,7,1,365 -BRDA:41,8,0,140 -BRDA:41,8,1,225 -BRDA:45,9,0,50 -BRDA:45,9,1,175 -BRDA:49,10,0,52 -BRDA:49,10,1,123 -BRDA:57,11,0,27 -BRDA:57,11,1,96 -BRDA:67,12,0,52 -BRDA:67,12,1,44 +BRDA:38,7,1,379 +BRDA:41,8,0,142 +BRDA:41,8,1,237 +BRDA:45,9,0,52 +BRDA:45,9,1,185 +BRDA:49,10,0,55 +BRDA:49,10,1,130 +BRDA:57,11,0,28 +BRDA:57,11,1,102 +BRDA:67,12,0,57 +BRDA:67,12,1,45 BRDA:85,13,0,53 -BRDA:85,13,1,48 +BRDA:85,13,1,51 BRDA:86,14,0,32 BRDA:86,14,1,21 BRDA:88,15,0,23 BRDA:88,15,1,9 BRDA:89,16,0,16 BRDA:89,16,1,16 -BRDA:102,17,0,50 -BRDA:102,17,1,50 -BRDA:103,18,0,24 -BRDA:103,18,1,24 +BRDA:102,17,0,2 +BRDA:102,17,1,49 +BRDA:103,18,0,26 +BRDA:103,18,1,25 BRF:36 BRH:36 end_of_record diff --git a/esm/index.js b/esm/index.js index 9944147..6782a4d 100644 --- a/esm/index.js +++ b/esm/index.js @@ -98,7 +98,7 @@ const domdiff = ( } } else { - while (currentStart <= currentEnd && currentNodes[currentStart] == null) currentStart++; + if (currentNodes[currentStart] == null) currentStart++; if (currentStart === currentEnd) { parentNode.removeChild(get(currentNodes[currentStart], -1)); } diff --git a/index.js b/index.js index bff0b27..40ba0e5 100644 --- a/index.js +++ b/index.js @@ -80,9 +80,8 @@ beforeNode // optional item/node to use as insertBefore delimiter } } } else { - while (currentStart <= currentEnd && currentNodes[currentStart] == null) { - currentStart++; - }if (currentStart === currentEnd) { + if (currentNodes[currentStart] == null) currentStart++; + if (currentStart === currentEnd) { parentNode.removeChild(get(currentNodes[currentStart], -1)); } else { var range = parentNode.ownerDocument.createRange(); diff --git a/min.js b/min.js index 26d4e15..3e465a2 100644 --- a/min.js +++ b/min.js @@ -1,2 +1,2 @@ var domdiff=function(){"use strict";/*! (c) 2017 Andrea Giammarchi (ISC) */ -var e=function(e){return e};return function(n,r,l,t,f){for(var i=t||e,s=null==f?null:i(f,0),o=0,u=0,a=r.length-1,c=r[0],v=r[a],d=l.length-1,B=l[0],m=l[d];o<=a&&u<=d;)if(null==c)c=r[++o];else if(null==v)v=r[--a];else if(null==B)B=l[++u];else if(null==m)m=l[--d];else if(c==B)c=r[++o],B=l[++u];else if(v==m)v=r[--a],m=l[--d];else if(c==m)n.insertBefore(i(c,1),i(v,-0).nextSibling),c=r[++o],m=l[--d];else if(v==B)n.insertBefore(i(v,1),i(c,0)),v=r[--a],B=l[++u];else{var g=r.indexOf(B);if(g<0)n.insertBefore(i(B,1),i(c,0)),B=l[++u];else{var h=r[g];r[g]=null,n.insertBefore(i(h,1),i(c,0)),B=l[++u]}}if(o>a){if(u<=d){var C=l[d+1],D=null==C?s:i(C,0);if(u===d)n.insertBefore(i(l[u],1),D);else{for(var p=n.ownerDocument.createDocumentFragment();u<=d;)p.appendChild(i(l[u++],1));n.insertBefore(p,D)}}}else{for(;o<=a&&null==r[o];)o++;if(o===a)n.removeChild(i(r[o],-1));else{var w=n.ownerDocument.createRange();w.setStartBefore(i(r[o],-1)),w.setEndAfter(i(r[a],-1)),w.deleteContents()}}return l}}(); \ No newline at end of file +var e=function(e){return e};return function(n,r,l,t,f){for(var i=t||e,s=null==f?null:i(f,0),o=0,u=0,a=r.length-1,c=r[0],v=r[a],d=l.length-1,B=l[0],m=l[d];o<=a&&u<=d;)if(null==c)c=r[++o];else if(null==v)v=r[--a];else if(null==B)B=l[++u];else if(null==m)m=l[--d];else if(c==B)c=r[++o],B=l[++u];else if(v==m)v=r[--a],m=l[--d];else if(c==m)n.insertBefore(i(c,1),i(v,-0).nextSibling),c=r[++o],m=l[--d];else if(v==B)n.insertBefore(i(v,1),i(c,0)),v=r[--a],B=l[++u];else{var g=r.indexOf(B);if(g<0)n.insertBefore(i(B,1),i(c,0)),B=l[++u];else{var h=r[g];r[g]=null,n.insertBefore(i(h,1),i(c,0)),B=l[++u]}}if(o>a){if(u<=d){var C=l[d+1],D=null==C?s:i(C,0);if(u===d)n.insertBefore(i(l[u],1),D);else{for(var p=n.ownerDocument.createDocumentFragment();u<=d;)p.appendChild(i(l[u++],1));n.insertBefore(p,D)}}}else if(null==r[o]&&o++,o===a)n.removeChild(i(r[o],-1));else{var w=n.ownerDocument.createRange();w.setStartBefore(i(r[o],-1)),w.setEndAfter(i(r[a],-1)),w.deleteContents()}return l}}(); \ No newline at end of file diff --git a/test/test.js b/test/test.js index 4f8d3fa..f7c4fa4 100644 --- a/test/test.js +++ b/test/test.js @@ -402,6 +402,33 @@ newState = domdiff( ); compare(newState, 'abc'); +newState = domdiff( + document.body, + newState, + [nodes.b, nodes.c, nodes.a, nodes.d], + null, + nodes.k +); +compare(newState, 'bcad'); + +newState = domdiff( + document.body, + newState, + [nodes.c, nodes.b, nodes.d], + null, + nodes.k +); +compare(newState, 'cbd'); + +newState = domdiff( + document.body, + newState, + [nodes.a, nodes.b, nodes.c], + null, + nodes.k +); +compare(newState, 'abc'); + newState = domdiff( document.body, newState, @@ -904,23 +931,23 @@ compare(newState, 'fedcba'); newState = domdiff( document.body, newState, - [] + [nodes.a] ); -compare(newState, ''); +compare(newState, 'a'); newState = domdiff( document.body, newState, - [nodes.a] + [nodes.b, nodes.c, nodes.d] ); -compare(newState, 'a'); +compare(newState, 'bcd'); newState = domdiff( document.body, newState, - [] + [nodes.a] ); -compare(newState, ''); +compare(newState, 'a'); tressa.end(); From e6b7ed1ab9cdbfc2e8f71b201f87592d0c564f8d Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Thu, 7 Dec 2017 06:40:36 -0200 Subject: [PATCH 17/71] 0.3.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8572749..132f496 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "domdiff", - "version": "0.3.1", + "version": "0.3.2", "description": "A fast and simple way to diff childNodes", "browser": "min.js", "main": "cjs/index.js", From 92dfd1b8153ad3564d34c644a9831a6db177cf69 Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Mon, 11 Dec 2017 17:09:59 -0200 Subject: [PATCH 18/71] entering last if/else only in certain conditions --- cjs/index.js | 24 ++++++++-------- coverage/coverage.json | 2 +- coverage/lcov-report/cjs/index.html | 6 ++-- coverage/lcov-report/cjs/index.js.html | 32 +++++++++++----------- coverage/lcov-report/index.html | 6 ++-- coverage/lcov.info | 38 ++++++++++++++------------ esm/index.js | 24 ++++++++-------- index.js | 22 +++++++-------- min.js | 2 +- 9 files changed, 79 insertions(+), 77 deletions(-) diff --git a/cjs/index.js b/cjs/index.js index c6264ce..d67feb5 100644 --- a/cjs/index.js +++ b/cjs/index.js @@ -82,8 +82,8 @@ const domdiff = ( } } } - if (currentStart > currentEnd) { - if (futureStart <= futureEnd) { + if (currentStart <= currentEnd || futureStart <= futureEnd) { + if (currentStart > currentEnd) { const pin = futureNodes[futureEnd + 1]; const place = pin == null ? before : get(pin, 0); if (futureStart === futureEnd) { @@ -97,17 +97,17 @@ const domdiff = ( parentNode.insertBefore(fragment, place); } } - } - else { - if (currentNodes[currentStart] == null) currentStart++; - if (currentStart === currentEnd) { - parentNode.removeChild(get(currentNodes[currentStart], -1)); - } else { - const range = parentNode.ownerDocument.createRange(); - range.setStartBefore(get(currentNodes[currentStart], -1)); - range.setEndAfter(get(currentNodes[currentEnd], -1)); - range.deleteContents(); + if (currentNodes[currentStart] == null) currentStart++; + if (currentStart === currentEnd) { + parentNode.removeChild(get(currentNodes[currentStart], -1)); + } + else { + const range = parentNode.ownerDocument.createRange(); + range.setStartBefore(get(currentNodes[currentStart], -1)); + range.setEndAfter(get(currentNodes[currentEnd], -1)); + range.deleteContents(); + } } } return futureNodes; diff --git a/coverage/coverage.json b/coverage/coverage.json index 265a32f..efce9cf 100644 --- a/coverage/coverage.json +++ b/coverage/coverage.json @@ -1 +1 @@ -{"/home/webreflection/code/domdiff/cjs/index.js":{"path":"/home/webreflection/code/domdiff/cjs/index.js","s":{"1":1,"2":559,"3":1,"4":104,"5":104,"6":104,"7":104,"8":104,"9":104,"10":104,"11":104,"12":104,"13":104,"14":462,"15":44,"16":418,"17":12,"18":406,"19":22,"20":384,"21":5,"22":379,"23":142,"24":142,"25":237,"26":52,"27":52,"28":185,"29":55,"30":55,"31":55,"32":130,"33":28,"34":28,"35":28,"36":102,"37":102,"38":57,"39":57,"40":45,"41":45,"42":45,"43":45,"44":104,"45":53,"46":32,"47":32,"48":32,"49":16,"50":16,"51":16,"52":48,"53":16,"54":51,"55":2,"56":51,"57":26,"58":25,"59":25,"60":25,"61":25,"62":104,"63":1},"b":{"1":[104,102],"2":[53,51],"3":[566,513],"4":[44,418],"5":[12,406],"6":[22,384],"7":[5,379],"8":[142,237],"9":[52,185],"10":[55,130],"11":[28,102],"12":[57,45],"13":[53,51],"14":[32,21],"15":[23,9],"16":[16,16],"17":[2,49],"18":[26,25]},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":10,"column":0},"end":{"line":10,"column":24}},"2":{"start":{"line":10,"column":22},"end":{"line":10,"column":23}},"3":{"start":{"line":12,"column":0},"end":{"line":114,"column":2}},"4":{"start":{"line":19,"column":2},"end":{"line":19,"column":34}},"5":{"start":{"line":20,"column":2},"end":{"line":20,"column":64}},"6":{"start":{"line":21,"column":2},"end":{"line":21,"column":40}},"7":{"start":{"line":22,"column":2},"end":{"line":22,"column":43}},"8":{"start":{"line":23,"column":2},"end":{"line":23,"column":41}},"9":{"start":{"line":24,"column":2},"end":{"line":24,"column":48}},"10":{"start":{"line":25,"column":2},"end":{"line":25,"column":41}},"11":{"start":{"line":26,"column":2},"end":{"line":26,"column":39}},"12":{"start":{"line":27,"column":2},"end":{"line":27,"column":45}},"13":{"start":{"line":28,"column":2},"end":{"line":84,"column":3}},"14":{"start":{"line":29,"column":4},"end":{"line":83,"column":5}},"15":{"start":{"line":30,"column":6},"end":{"line":30,"column":54}},"16":{"start":{"line":32,"column":9},"end":{"line":83,"column":5}},"17":{"start":{"line":33,"column":6},"end":{"line":33,"column":50}},"18":{"start":{"line":35,"column":9},"end":{"line":83,"column":5}},"19":{"start":{"line":36,"column":6},"end":{"line":36,"column":51}},"20":{"start":{"line":38,"column":9},"end":{"line":83,"column":5}},"21":{"start":{"line":39,"column":6},"end":{"line":39,"column":47}},"22":{"start":{"line":41,"column":9},"end":{"line":83,"column":5}},"23":{"start":{"line":42,"column":6},"end":{"line":42,"column":54}},"24":{"start":{"line":43,"column":6},"end":{"line":43,"column":51}},"25":{"start":{"line":45,"column":9},"end":{"line":83,"column":5}},"26":{"start":{"line":46,"column":6},"end":{"line":46,"column":50}},"27":{"start":{"line":47,"column":6},"end":{"line":47,"column":47}},"28":{"start":{"line":49,"column":9},"end":{"line":83,"column":5}},"29":{"start":{"line":50,"column":6},"end":{"line":53,"column":8}},"30":{"start":{"line":54,"column":6},"end":{"line":54,"column":54}},"31":{"start":{"line":55,"column":6},"end":{"line":55,"column":47}},"32":{"start":{"line":57,"column":9},"end":{"line":83,"column":5}},"33":{"start":{"line":58,"column":6},"end":{"line":61,"column":8}},"34":{"start":{"line":62,"column":6},"end":{"line":62,"column":50}},"35":{"start":{"line":63,"column":6},"end":{"line":63,"column":51}},"36":{"start":{"line":66,"column":6},"end":{"line":66,"column":56}},"37":{"start":{"line":67,"column":6},"end":{"line":82,"column":7}},"38":{"start":{"line":68,"column":8},"end":{"line":71,"column":10}},"39":{"start":{"line":72,"column":8},"end":{"line":72,"column":53}},"40":{"start":{"line":75,"column":8},"end":{"line":75,"column":37}},"41":{"start":{"line":76,"column":8},"end":{"line":76,"column":35}},"42":{"start":{"line":77,"column":8},"end":{"line":80,"column":10}},"43":{"start":{"line":81,"column":8},"end":{"line":81,"column":53}},"44":{"start":{"line":85,"column":2},"end":{"line":112,"column":3}},"45":{"start":{"line":86,"column":4},"end":{"line":99,"column":5}},"46":{"start":{"line":87,"column":6},"end":{"line":87,"column":45}},"47":{"start":{"line":88,"column":6},"end":{"line":88,"column":55}},"48":{"start":{"line":89,"column":6},"end":{"line":98,"column":7}},"49":{"start":{"line":90,"column":8},"end":{"line":90,"column":73}},"50":{"start":{"line":93,"column":8},"end":{"line":93,"column":75}},"51":{"start":{"line":94,"column":8},"end":{"line":96,"column":9}},"52":{"start":{"line":95,"column":10},"end":{"line":95,"column":67}},"53":{"start":{"line":97,"column":8},"end":{"line":97,"column":49}},"54":{"start":{"line":102,"column":4},"end":{"line":102,"column":59}},"55":{"start":{"line":102,"column":44},"end":{"line":102,"column":59}},"56":{"start":{"line":103,"column":4},"end":{"line":111,"column":5}},"57":{"start":{"line":104,"column":6},"end":{"line":104,"column":66}},"58":{"start":{"line":107,"column":6},"end":{"line":107,"column":59}},"59":{"start":{"line":108,"column":6},"end":{"line":108,"column":64}},"60":{"start":{"line":109,"column":6},"end":{"line":109,"column":59}},"61":{"start":{"line":110,"column":6},"end":{"line":110,"column":29}},"62":{"start":{"line":113,"column":2},"end":{"line":113,"column":21}},"63":{"start":{"line":116,"column":0},"end":{"line":116,"column":78}}},"branchMap":{"1":{"line":19,"type":"binary-expr","locations":[{"start":{"line":19,"column":14},"end":{"line":19,"column":21}},{"start":{"line":19,"column":25},"end":{"line":19,"column":33}}]},"2":{"line":20,"type":"cond-expr","locations":[{"start":{"line":20,"column":38},"end":{"line":20,"column":42}},{"start":{"line":20,"column":45},"end":{"line":20,"column":63}}]},"3":{"line":28,"type":"binary-expr","locations":[{"start":{"line":28,"column":9},"end":{"line":28,"column":35}},{"start":{"line":28,"column":39},"end":{"line":28,"column":63}}]},"4":{"line":29,"type":"if","locations":[{"start":{"line":29,"column":4},"end":{"line":29,"column":4}},{"start":{"line":29,"column":4},"end":{"line":29,"column":4}}]},"5":{"line":32,"type":"if","locations":[{"start":{"line":32,"column":9},"end":{"line":32,"column":9}},{"start":{"line":32,"column":9},"end":{"line":32,"column":9}}]},"6":{"line":35,"type":"if","locations":[{"start":{"line":35,"column":9},"end":{"line":35,"column":9}},{"start":{"line":35,"column":9},"end":{"line":35,"column":9}}]},"7":{"line":38,"type":"if","locations":[{"start":{"line":38,"column":9},"end":{"line":38,"column":9}},{"start":{"line":38,"column":9},"end":{"line":38,"column":9}}]},"8":{"line":41,"type":"if","locations":[{"start":{"line":41,"column":9},"end":{"line":41,"column":9}},{"start":{"line":41,"column":9},"end":{"line":41,"column":9}}]},"9":{"line":45,"type":"if","locations":[{"start":{"line":45,"column":9},"end":{"line":45,"column":9}},{"start":{"line":45,"column":9},"end":{"line":45,"column":9}}]},"10":{"line":49,"type":"if","locations":[{"start":{"line":49,"column":9},"end":{"line":49,"column":9}},{"start":{"line":49,"column":9},"end":{"line":49,"column":9}}]},"11":{"line":57,"type":"if","locations":[{"start":{"line":57,"column":9},"end":{"line":57,"column":9}},{"start":{"line":57,"column":9},"end":{"line":57,"column":9}}]},"12":{"line":67,"type":"if","locations":[{"start":{"line":67,"column":6},"end":{"line":67,"column":6}},{"start":{"line":67,"column":6},"end":{"line":67,"column":6}}]},"13":{"line":85,"type":"if","locations":[{"start":{"line":85,"column":2},"end":{"line":85,"column":2}},{"start":{"line":85,"column":2},"end":{"line":85,"column":2}}]},"14":{"line":86,"type":"if","locations":[{"start":{"line":86,"column":4},"end":{"line":86,"column":4}},{"start":{"line":86,"column":4},"end":{"line":86,"column":4}}]},"15":{"line":88,"type":"cond-expr","locations":[{"start":{"line":88,"column":34},"end":{"line":88,"column":40}},{"start":{"line":88,"column":43},"end":{"line":88,"column":54}}]},"16":{"line":89,"type":"if","locations":[{"start":{"line":89,"column":6},"end":{"line":89,"column":6}},{"start":{"line":89,"column":6},"end":{"line":89,"column":6}}]},"17":{"line":102,"type":"if","locations":[{"start":{"line":102,"column":4},"end":{"line":102,"column":4}},{"start":{"line":102,"column":4},"end":{"line":102,"column":4}}]},"18":{"line":103,"type":"if","locations":[{"start":{"line":103,"column":4},"end":{"line":103,"column":4}},{"start":{"line":103,"column":4},"end":{"line":103,"column":4}}]}}}} \ No newline at end of file +{"/home/webreflection/code/domdiff/cjs/index.js":{"path":"/home/webreflection/code/domdiff/cjs/index.js","s":{"1":1,"2":559,"3":1,"4":104,"5":104,"6":104,"7":104,"8":104,"9":104,"10":104,"11":104,"12":104,"13":104,"14":462,"15":44,"16":418,"17":12,"18":406,"19":22,"20":384,"21":5,"22":379,"23":142,"24":142,"25":237,"26":52,"27":52,"28":185,"29":55,"30":55,"31":55,"32":130,"33":28,"34":28,"35":28,"36":102,"37":102,"38":57,"39":57,"40":45,"41":45,"42":45,"43":45,"44":104,"45":83,"46":32,"47":32,"48":32,"49":16,"50":16,"51":16,"52":48,"53":16,"54":51,"55":2,"56":51,"57":26,"58":25,"59":25,"60":25,"61":25,"62":104,"63":1},"b":{"1":[104,102],"2":[53,51],"3":[566,513],"4":[44,418],"5":[12,406],"6":[22,384],"7":[5,379],"8":[142,237],"9":[52,185],"10":[55,130],"11":[28,102],"12":[57,45],"13":[83,21],"14":[104,53],"15":[32,51],"16":[23,9],"17":[16,16],"18":[2,49],"19":[26,25]},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":10,"column":0},"end":{"line":10,"column":24}},"2":{"start":{"line":10,"column":22},"end":{"line":10,"column":23}},"3":{"start":{"line":12,"column":0},"end":{"line":114,"column":2}},"4":{"start":{"line":19,"column":2},"end":{"line":19,"column":34}},"5":{"start":{"line":20,"column":2},"end":{"line":20,"column":64}},"6":{"start":{"line":21,"column":2},"end":{"line":21,"column":40}},"7":{"start":{"line":22,"column":2},"end":{"line":22,"column":43}},"8":{"start":{"line":23,"column":2},"end":{"line":23,"column":41}},"9":{"start":{"line":24,"column":2},"end":{"line":24,"column":48}},"10":{"start":{"line":25,"column":2},"end":{"line":25,"column":41}},"11":{"start":{"line":26,"column":2},"end":{"line":26,"column":39}},"12":{"start":{"line":27,"column":2},"end":{"line":27,"column":45}},"13":{"start":{"line":28,"column":2},"end":{"line":84,"column":3}},"14":{"start":{"line":29,"column":4},"end":{"line":83,"column":5}},"15":{"start":{"line":30,"column":6},"end":{"line":30,"column":54}},"16":{"start":{"line":32,"column":9},"end":{"line":83,"column":5}},"17":{"start":{"line":33,"column":6},"end":{"line":33,"column":50}},"18":{"start":{"line":35,"column":9},"end":{"line":83,"column":5}},"19":{"start":{"line":36,"column":6},"end":{"line":36,"column":51}},"20":{"start":{"line":38,"column":9},"end":{"line":83,"column":5}},"21":{"start":{"line":39,"column":6},"end":{"line":39,"column":47}},"22":{"start":{"line":41,"column":9},"end":{"line":83,"column":5}},"23":{"start":{"line":42,"column":6},"end":{"line":42,"column":54}},"24":{"start":{"line":43,"column":6},"end":{"line":43,"column":51}},"25":{"start":{"line":45,"column":9},"end":{"line":83,"column":5}},"26":{"start":{"line":46,"column":6},"end":{"line":46,"column":50}},"27":{"start":{"line":47,"column":6},"end":{"line":47,"column":47}},"28":{"start":{"line":49,"column":9},"end":{"line":83,"column":5}},"29":{"start":{"line":50,"column":6},"end":{"line":53,"column":8}},"30":{"start":{"line":54,"column":6},"end":{"line":54,"column":54}},"31":{"start":{"line":55,"column":6},"end":{"line":55,"column":47}},"32":{"start":{"line":57,"column":9},"end":{"line":83,"column":5}},"33":{"start":{"line":58,"column":6},"end":{"line":61,"column":8}},"34":{"start":{"line":62,"column":6},"end":{"line":62,"column":50}},"35":{"start":{"line":63,"column":6},"end":{"line":63,"column":51}},"36":{"start":{"line":66,"column":6},"end":{"line":66,"column":56}},"37":{"start":{"line":67,"column":6},"end":{"line":82,"column":7}},"38":{"start":{"line":68,"column":8},"end":{"line":71,"column":10}},"39":{"start":{"line":72,"column":8},"end":{"line":72,"column":53}},"40":{"start":{"line":75,"column":8},"end":{"line":75,"column":37}},"41":{"start":{"line":76,"column":8},"end":{"line":76,"column":35}},"42":{"start":{"line":77,"column":8},"end":{"line":80,"column":10}},"43":{"start":{"line":81,"column":8},"end":{"line":81,"column":53}},"44":{"start":{"line":85,"column":2},"end":{"line":112,"column":3}},"45":{"start":{"line":86,"column":4},"end":{"line":111,"column":5}},"46":{"start":{"line":87,"column":6},"end":{"line":87,"column":45}},"47":{"start":{"line":88,"column":6},"end":{"line":88,"column":55}},"48":{"start":{"line":89,"column":6},"end":{"line":98,"column":7}},"49":{"start":{"line":90,"column":8},"end":{"line":90,"column":73}},"50":{"start":{"line":93,"column":8},"end":{"line":93,"column":75}},"51":{"start":{"line":94,"column":8},"end":{"line":96,"column":9}},"52":{"start":{"line":95,"column":10},"end":{"line":95,"column":67}},"53":{"start":{"line":97,"column":8},"end":{"line":97,"column":49}},"54":{"start":{"line":101,"column":6},"end":{"line":101,"column":61}},"55":{"start":{"line":101,"column":46},"end":{"line":101,"column":61}},"56":{"start":{"line":102,"column":6},"end":{"line":110,"column":7}},"57":{"start":{"line":103,"column":8},"end":{"line":103,"column":68}},"58":{"start":{"line":106,"column":8},"end":{"line":106,"column":61}},"59":{"start":{"line":107,"column":8},"end":{"line":107,"column":66}},"60":{"start":{"line":108,"column":8},"end":{"line":108,"column":61}},"61":{"start":{"line":109,"column":8},"end":{"line":109,"column":31}},"62":{"start":{"line":113,"column":2},"end":{"line":113,"column":21}},"63":{"start":{"line":116,"column":0},"end":{"line":116,"column":78}}},"branchMap":{"1":{"line":19,"type":"binary-expr","locations":[{"start":{"line":19,"column":14},"end":{"line":19,"column":21}},{"start":{"line":19,"column":25},"end":{"line":19,"column":33}}]},"2":{"line":20,"type":"cond-expr","locations":[{"start":{"line":20,"column":38},"end":{"line":20,"column":42}},{"start":{"line":20,"column":45},"end":{"line":20,"column":63}}]},"3":{"line":28,"type":"binary-expr","locations":[{"start":{"line":28,"column":9},"end":{"line":28,"column":35}},{"start":{"line":28,"column":39},"end":{"line":28,"column":63}}]},"4":{"line":29,"type":"if","locations":[{"start":{"line":29,"column":4},"end":{"line":29,"column":4}},{"start":{"line":29,"column":4},"end":{"line":29,"column":4}}]},"5":{"line":32,"type":"if","locations":[{"start":{"line":32,"column":9},"end":{"line":32,"column":9}},{"start":{"line":32,"column":9},"end":{"line":32,"column":9}}]},"6":{"line":35,"type":"if","locations":[{"start":{"line":35,"column":9},"end":{"line":35,"column":9}},{"start":{"line":35,"column":9},"end":{"line":35,"column":9}}]},"7":{"line":38,"type":"if","locations":[{"start":{"line":38,"column":9},"end":{"line":38,"column":9}},{"start":{"line":38,"column":9},"end":{"line":38,"column":9}}]},"8":{"line":41,"type":"if","locations":[{"start":{"line":41,"column":9},"end":{"line":41,"column":9}},{"start":{"line":41,"column":9},"end":{"line":41,"column":9}}]},"9":{"line":45,"type":"if","locations":[{"start":{"line":45,"column":9},"end":{"line":45,"column":9}},{"start":{"line":45,"column":9},"end":{"line":45,"column":9}}]},"10":{"line":49,"type":"if","locations":[{"start":{"line":49,"column":9},"end":{"line":49,"column":9}},{"start":{"line":49,"column":9},"end":{"line":49,"column":9}}]},"11":{"line":57,"type":"if","locations":[{"start":{"line":57,"column":9},"end":{"line":57,"column":9}},{"start":{"line":57,"column":9},"end":{"line":57,"column":9}}]},"12":{"line":67,"type":"if","locations":[{"start":{"line":67,"column":6},"end":{"line":67,"column":6}},{"start":{"line":67,"column":6},"end":{"line":67,"column":6}}]},"13":{"line":85,"type":"if","locations":[{"start":{"line":85,"column":2},"end":{"line":85,"column":2}},{"start":{"line":85,"column":2},"end":{"line":85,"column":2}}]},"14":{"line":85,"type":"binary-expr","locations":[{"start":{"line":85,"column":6},"end":{"line":85,"column":32}},{"start":{"line":85,"column":36},"end":{"line":85,"column":60}}]},"15":{"line":86,"type":"if","locations":[{"start":{"line":86,"column":4},"end":{"line":86,"column":4}},{"start":{"line":86,"column":4},"end":{"line":86,"column":4}}]},"16":{"line":88,"type":"cond-expr","locations":[{"start":{"line":88,"column":34},"end":{"line":88,"column":40}},{"start":{"line":88,"column":43},"end":{"line":88,"column":54}}]},"17":{"line":89,"type":"if","locations":[{"start":{"line":89,"column":6},"end":{"line":89,"column":6}},{"start":{"line":89,"column":6},"end":{"line":89,"column":6}}]},"18":{"line":101,"type":"if","locations":[{"start":{"line":101,"column":6},"end":{"line":101,"column":6}},{"start":{"line":101,"column":6},"end":{"line":101,"column":6}}]},"19":{"line":102,"type":"if","locations":[{"start":{"line":102,"column":6},"end":{"line":102,"column":6}},{"start":{"line":102,"column":6},"end":{"line":102,"column":6}}]}}}} \ No newline at end of file diff --git a/coverage/lcov-report/cjs/index.html b/coverage/lcov-report/cjs/index.html index 2ce9432..6112ef6 100644 --- a/coverage/lcov-report/cjs/index.html +++ b/coverage/lcov-report/cjs/index.html @@ -27,7 +27,7 @@

100% Branches - 36/36 + 38/38
100% @@ -64,7 +64,7 @@

100% 63/63 100% - 36/36 + 38/38 100% 0/0 100% @@ -77,7 +77,7 @@

diff --git a/coverage/lcov-report/cjs/index.js.html b/coverage/lcov-report/cjs/index.js.html index a82018a..5ae01c0 100644 --- a/coverage/lcov-report/cjs/index.js.html +++ b/coverage/lcov-report/cjs/index.js.html @@ -27,7 +27,7 @@

100% Branches - 36/36 + 38/38
100% @@ -244,7 +244,7 @@

    104× -53× +83× 32× 32× 32× @@ -259,7 +259,6 @@

      -  51× 51× 26× @@ -271,6 +270,7 @@

25×     +  104×     @@ -359,8 +359,8 @@

} } } - if (currentStart > currentEnd) { - if (futureStart <= futureEnd) { + if (currentStart <= currentEnd || futureStart <= futureEnd) { + if (currentStart > currentEnd) { const pin = futureNodes[futureEnd + 1]; const place = pin == null ? before : get(pin, 0); if (futureStart === futureEnd) { @@ -374,17 +374,17 @@

parentNode.insertBefore(fragment, place); } } - } - else { - if (currentNodes[currentStart] == null) currentStart++; - if (currentStart === currentEnd) { - parentNode.removeChild(get(currentNodes[currentStart], -1)); - } else { - const range = parentNode.ownerDocument.createRange(); - range.setStartBefore(get(currentNodes[currentStart], -1)); - range.setEndAfter(get(currentNodes[currentEnd], -1)); - range.deleteContents(); + if (currentNodes[currentStart] == null) currentStart++; + if (currentStart === currentEnd) { + parentNode.removeChild(get(currentNodes[currentStart], -1)); + } + else { + const range = parentNode.ownerDocument.createRange(); + range.setStartBefore(get(currentNodes[currentStart], -1)); + range.setEndAfter(get(currentNodes[currentEnd], -1)); + range.deleteContents(); + } } } return futureNodes; @@ -397,7 +397,7 @@

diff --git a/coverage/lcov-report/index.html b/coverage/lcov-report/index.html index fef6da5..b0d0fc0 100644 --- a/coverage/lcov-report/index.html +++ b/coverage/lcov-report/index.html @@ -27,7 +27,7 @@

100% Branches - 36/36 + 38/38
100% @@ -64,7 +64,7 @@

100% 63/63 100% - 36/36 + 38/38 100% 0/0 100% @@ -77,7 +77,7 @@

diff --git a/coverage/lcov.info b/coverage/lcov.info index c6d5f3e..436880a 100644 --- a/coverage/lcov.info +++ b/coverage/lcov.info @@ -45,7 +45,7 @@ DA:76,45 DA:77,45 DA:81,45 DA:85,104 -DA:86,53 +DA:86,83 DA:87,32 DA:88,32 DA:89,32 @@ -54,13 +54,13 @@ DA:93,16 DA:94,16 DA:95,48 DA:97,16 +DA:101,51 DA:102,51 -DA:103,51 -DA:104,26 +DA:103,26 +DA:106,25 DA:107,25 DA:108,25 DA:109,25 -DA:110,25 DA:113,104 DA:116,1 LF:61 @@ -89,18 +89,20 @@ BRDA:57,11,0,28 BRDA:57,11,1,102 BRDA:67,12,0,57 BRDA:67,12,1,45 -BRDA:85,13,0,53 -BRDA:85,13,1,51 -BRDA:86,14,0,32 -BRDA:86,14,1,21 -BRDA:88,15,0,23 -BRDA:88,15,1,9 -BRDA:89,16,0,16 -BRDA:89,16,1,16 -BRDA:102,17,0,2 -BRDA:102,17,1,49 -BRDA:103,18,0,26 -BRDA:103,18,1,25 -BRF:36 -BRH:36 +BRDA:85,13,0,83 +BRDA:85,13,1,21 +BRDA:85,14,0,104 +BRDA:85,14,1,53 +BRDA:86,15,0,32 +BRDA:86,15,1,51 +BRDA:88,16,0,23 +BRDA:88,16,1,9 +BRDA:89,17,0,16 +BRDA:89,17,1,16 +BRDA:101,18,0,2 +BRDA:101,18,1,49 +BRDA:102,19,0,26 +BRDA:102,19,1,25 +BRF:38 +BRH:38 end_of_record diff --git a/esm/index.js b/esm/index.js index 6782a4d..daa72c4 100644 --- a/esm/index.js +++ b/esm/index.js @@ -81,8 +81,8 @@ const domdiff = ( } } } - if (currentStart > currentEnd) { - if (futureStart <= futureEnd) { + if (currentStart <= currentEnd || futureStart <= futureEnd) { + if (currentStart > currentEnd) { const pin = futureNodes[futureEnd + 1]; const place = pin == null ? before : get(pin, 0); if (futureStart === futureEnd) { @@ -96,17 +96,17 @@ const domdiff = ( parentNode.insertBefore(fragment, place); } } - } - else { - if (currentNodes[currentStart] == null) currentStart++; - if (currentStart === currentEnd) { - parentNode.removeChild(get(currentNodes[currentStart], -1)); - } else { - const range = parentNode.ownerDocument.createRange(); - range.setStartBefore(get(currentNodes[currentStart], -1)); - range.setEndAfter(get(currentNodes[currentEnd], -1)); - range.deleteContents(); + if (currentNodes[currentStart] == null) currentStart++; + if (currentStart === currentEnd) { + parentNode.removeChild(get(currentNodes[currentStart], -1)); + } + else { + const range = parentNode.ownerDocument.createRange(); + range.setStartBefore(get(currentNodes[currentStart], -1)); + range.setEndAfter(get(currentNodes[currentEnd], -1)); + range.deleteContents(); + } } } return futureNodes; diff --git a/index.js b/index.js index 40ba0e5..df247ef 100644 --- a/index.js +++ b/index.js @@ -65,8 +65,8 @@ beforeNode // optional item/node to use as insertBefore delimiter } } } - if (currentStart > currentEnd) { - if (futureStart <= futureEnd) { + if (currentStart <= currentEnd || futureStart <= futureEnd) { + if (currentStart > currentEnd) { var pin = futureNodes[futureEnd + 1]; var place = pin == null ? before : get(pin, 0); if (futureStart === futureEnd) { @@ -78,16 +78,16 @@ beforeNode // optional item/node to use as insertBefore delimiter } parentNode.insertBefore(fragment, place); } - } - } else { - if (currentNodes[currentStart] == null) currentStart++; - if (currentStart === currentEnd) { - parentNode.removeChild(get(currentNodes[currentStart], -1)); } else { - var range = parentNode.ownerDocument.createRange(); - range.setStartBefore(get(currentNodes[currentStart], -1)); - range.setEndAfter(get(currentNodes[currentEnd], -1)); - range.deleteContents(); + if (currentNodes[currentStart] == null) currentStart++; + if (currentStart === currentEnd) { + parentNode.removeChild(get(currentNodes[currentStart], -1)); + } else { + var range = parentNode.ownerDocument.createRange(); + range.setStartBefore(get(currentNodes[currentStart], -1)); + range.setEndAfter(get(currentNodes[currentEnd], -1)); + range.deleteContents(); + } } } return futureNodes; diff --git a/min.js b/min.js index 3e465a2..383d5ff 100644 --- a/min.js +++ b/min.js @@ -1,2 +1,2 @@ var domdiff=function(){"use strict";/*! (c) 2017 Andrea Giammarchi (ISC) */ -var e=function(e){return e};return function(n,r,l,t,f){for(var i=t||e,s=null==f?null:i(f,0),o=0,u=0,a=r.length-1,c=r[0],v=r[a],d=l.length-1,B=l[0],m=l[d];o<=a&&u<=d;)if(null==c)c=r[++o];else if(null==v)v=r[--a];else if(null==B)B=l[++u];else if(null==m)m=l[--d];else if(c==B)c=r[++o],B=l[++u];else if(v==m)v=r[--a],m=l[--d];else if(c==m)n.insertBefore(i(c,1),i(v,-0).nextSibling),c=r[++o],m=l[--d];else if(v==B)n.insertBefore(i(v,1),i(c,0)),v=r[--a],B=l[++u];else{var g=r.indexOf(B);if(g<0)n.insertBefore(i(B,1),i(c,0)),B=l[++u];else{var h=r[g];r[g]=null,n.insertBefore(i(h,1),i(c,0)),B=l[++u]}}if(o>a){if(u<=d){var C=l[d+1],D=null==C?s:i(C,0);if(u===d)n.insertBefore(i(l[u],1),D);else{for(var p=n.ownerDocument.createDocumentFragment();u<=d;)p.appendChild(i(l[u++],1));n.insertBefore(p,D)}}}else if(null==r[o]&&o++,o===a)n.removeChild(i(r[o],-1));else{var w=n.ownerDocument.createRange();w.setStartBefore(i(r[o],-1)),w.setEndAfter(i(r[a],-1)),w.deleteContents()}return l}}(); \ No newline at end of file +var e=function(e){return e};return function(n,r,l,t,f){for(var i=t||e,s=null==f?null:i(f,0),o=0,u=0,a=r.length-1,c=r[0],v=r[a],d=l.length-1,B=l[0],m=l[d];o<=a&&u<=d;)if(null==c)c=r[++o];else if(null==v)v=r[--a];else if(null==B)B=l[++u];else if(null==m)m=l[--d];else if(c==B)c=r[++o],B=l[++u];else if(v==m)v=r[--a],m=l[--d];else if(c==m)n.insertBefore(i(c,1),i(v,-0).nextSibling),c=r[++o],m=l[--d];else if(v==B)n.insertBefore(i(v,1),i(c,0)),v=r[--a],B=l[++u];else{var g=r.indexOf(B);if(g<0)n.insertBefore(i(B,1),i(c,0)),B=l[++u];else{var h=r[g];r[g]=null,n.insertBefore(i(h,1),i(c,0)),B=l[++u]}}if(o<=a||u<=d)if(o>a){var C=l[d+1],D=null==C?s:i(C,0);if(u===d)n.insertBefore(i(l[u],1),D);else{for(var p=n.ownerDocument.createDocumentFragment();u<=d;)p.appendChild(i(l[u++],1));n.insertBefore(p,D)}}else if(null==r[o]&&o++,o===a)n.removeChild(i(r[o],-1));else{var w=n.ownerDocument.createRange();w.setStartBefore(i(r[o],-1)),w.setEndAfter(i(r[a],-1)),w.deleteContents()}return l}}(); \ No newline at end of file From ba5f33d4fd65c254b11985d1a5ddbeb7e556fdd9 Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Mon, 11 Dec 2017 17:10:10 -0200 Subject: [PATCH 19/71] 0.3.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 132f496..d81b013 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "domdiff", - "version": "0.3.2", + "version": "0.3.3", "description": "A fast and simple way to diff childNodes", "browser": "min.js", "main": "cjs/index.js", From de1195e1313aa0882a668c552628bc86c63a7b29 Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Mon, 11 Dec 2017 17:24:37 -0200 Subject: [PATCH 20/71] removed another condition --- cjs/index.js | 4 +++- coverage/coverage.json | 2 +- coverage/lcov-report/cjs/index.html | 14 +++++------ coverage/lcov-report/cjs/index.js.html | 32 +++++++++++++++---------- coverage/lcov-report/index.html | 14 +++++------ coverage/lcov.info | 33 ++++++++++++-------------- esm/index.js | 4 +++- index.js | 4 +++- min.js | 2 +- 9 files changed, 59 insertions(+), 50 deletions(-) diff --git a/cjs/index.js b/cjs/index.js index d67feb5..7dcef1d 100644 --- a/cjs/index.js +++ b/cjs/index.js @@ -98,7 +98,9 @@ const domdiff = ( } } else { - if (currentNodes[currentStart] == null) currentStart++; + // TODO: this case never happens but it was previously essential. + // anything to further investigate? + // if (currentNodes[currentStart] == null) currentStart++; if (currentStart === currentEnd) { parentNode.removeChild(get(currentNodes[currentStart], -1)); } diff --git a/coverage/coverage.json b/coverage/coverage.json index efce9cf..210b250 100644 --- a/coverage/coverage.json +++ b/coverage/coverage.json @@ -1 +1 @@ -{"/home/webreflection/code/domdiff/cjs/index.js":{"path":"/home/webreflection/code/domdiff/cjs/index.js","s":{"1":1,"2":559,"3":1,"4":104,"5":104,"6":104,"7":104,"8":104,"9":104,"10":104,"11":104,"12":104,"13":104,"14":462,"15":44,"16":418,"17":12,"18":406,"19":22,"20":384,"21":5,"22":379,"23":142,"24":142,"25":237,"26":52,"27":52,"28":185,"29":55,"30":55,"31":55,"32":130,"33":28,"34":28,"35":28,"36":102,"37":102,"38":57,"39":57,"40":45,"41":45,"42":45,"43":45,"44":104,"45":83,"46":32,"47":32,"48":32,"49":16,"50":16,"51":16,"52":48,"53":16,"54":51,"55":2,"56":51,"57":26,"58":25,"59":25,"60":25,"61":25,"62":104,"63":1},"b":{"1":[104,102],"2":[53,51],"3":[566,513],"4":[44,418],"5":[12,406],"6":[22,384],"7":[5,379],"8":[142,237],"9":[52,185],"10":[55,130],"11":[28,102],"12":[57,45],"13":[83,21],"14":[104,53],"15":[32,51],"16":[23,9],"17":[16,16],"18":[2,49],"19":[26,25]},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":10,"column":0},"end":{"line":10,"column":24}},"2":{"start":{"line":10,"column":22},"end":{"line":10,"column":23}},"3":{"start":{"line":12,"column":0},"end":{"line":114,"column":2}},"4":{"start":{"line":19,"column":2},"end":{"line":19,"column":34}},"5":{"start":{"line":20,"column":2},"end":{"line":20,"column":64}},"6":{"start":{"line":21,"column":2},"end":{"line":21,"column":40}},"7":{"start":{"line":22,"column":2},"end":{"line":22,"column":43}},"8":{"start":{"line":23,"column":2},"end":{"line":23,"column":41}},"9":{"start":{"line":24,"column":2},"end":{"line":24,"column":48}},"10":{"start":{"line":25,"column":2},"end":{"line":25,"column":41}},"11":{"start":{"line":26,"column":2},"end":{"line":26,"column":39}},"12":{"start":{"line":27,"column":2},"end":{"line":27,"column":45}},"13":{"start":{"line":28,"column":2},"end":{"line":84,"column":3}},"14":{"start":{"line":29,"column":4},"end":{"line":83,"column":5}},"15":{"start":{"line":30,"column":6},"end":{"line":30,"column":54}},"16":{"start":{"line":32,"column":9},"end":{"line":83,"column":5}},"17":{"start":{"line":33,"column":6},"end":{"line":33,"column":50}},"18":{"start":{"line":35,"column":9},"end":{"line":83,"column":5}},"19":{"start":{"line":36,"column":6},"end":{"line":36,"column":51}},"20":{"start":{"line":38,"column":9},"end":{"line":83,"column":5}},"21":{"start":{"line":39,"column":6},"end":{"line":39,"column":47}},"22":{"start":{"line":41,"column":9},"end":{"line":83,"column":5}},"23":{"start":{"line":42,"column":6},"end":{"line":42,"column":54}},"24":{"start":{"line":43,"column":6},"end":{"line":43,"column":51}},"25":{"start":{"line":45,"column":9},"end":{"line":83,"column":5}},"26":{"start":{"line":46,"column":6},"end":{"line":46,"column":50}},"27":{"start":{"line":47,"column":6},"end":{"line":47,"column":47}},"28":{"start":{"line":49,"column":9},"end":{"line":83,"column":5}},"29":{"start":{"line":50,"column":6},"end":{"line":53,"column":8}},"30":{"start":{"line":54,"column":6},"end":{"line":54,"column":54}},"31":{"start":{"line":55,"column":6},"end":{"line":55,"column":47}},"32":{"start":{"line":57,"column":9},"end":{"line":83,"column":5}},"33":{"start":{"line":58,"column":6},"end":{"line":61,"column":8}},"34":{"start":{"line":62,"column":6},"end":{"line":62,"column":50}},"35":{"start":{"line":63,"column":6},"end":{"line":63,"column":51}},"36":{"start":{"line":66,"column":6},"end":{"line":66,"column":56}},"37":{"start":{"line":67,"column":6},"end":{"line":82,"column":7}},"38":{"start":{"line":68,"column":8},"end":{"line":71,"column":10}},"39":{"start":{"line":72,"column":8},"end":{"line":72,"column":53}},"40":{"start":{"line":75,"column":8},"end":{"line":75,"column":37}},"41":{"start":{"line":76,"column":8},"end":{"line":76,"column":35}},"42":{"start":{"line":77,"column":8},"end":{"line":80,"column":10}},"43":{"start":{"line":81,"column":8},"end":{"line":81,"column":53}},"44":{"start":{"line":85,"column":2},"end":{"line":112,"column":3}},"45":{"start":{"line":86,"column":4},"end":{"line":111,"column":5}},"46":{"start":{"line":87,"column":6},"end":{"line":87,"column":45}},"47":{"start":{"line":88,"column":6},"end":{"line":88,"column":55}},"48":{"start":{"line":89,"column":6},"end":{"line":98,"column":7}},"49":{"start":{"line":90,"column":8},"end":{"line":90,"column":73}},"50":{"start":{"line":93,"column":8},"end":{"line":93,"column":75}},"51":{"start":{"line":94,"column":8},"end":{"line":96,"column":9}},"52":{"start":{"line":95,"column":10},"end":{"line":95,"column":67}},"53":{"start":{"line":97,"column":8},"end":{"line":97,"column":49}},"54":{"start":{"line":101,"column":6},"end":{"line":101,"column":61}},"55":{"start":{"line":101,"column":46},"end":{"line":101,"column":61}},"56":{"start":{"line":102,"column":6},"end":{"line":110,"column":7}},"57":{"start":{"line":103,"column":8},"end":{"line":103,"column":68}},"58":{"start":{"line":106,"column":8},"end":{"line":106,"column":61}},"59":{"start":{"line":107,"column":8},"end":{"line":107,"column":66}},"60":{"start":{"line":108,"column":8},"end":{"line":108,"column":61}},"61":{"start":{"line":109,"column":8},"end":{"line":109,"column":31}},"62":{"start":{"line":113,"column":2},"end":{"line":113,"column":21}},"63":{"start":{"line":116,"column":0},"end":{"line":116,"column":78}}},"branchMap":{"1":{"line":19,"type":"binary-expr","locations":[{"start":{"line":19,"column":14},"end":{"line":19,"column":21}},{"start":{"line":19,"column":25},"end":{"line":19,"column":33}}]},"2":{"line":20,"type":"cond-expr","locations":[{"start":{"line":20,"column":38},"end":{"line":20,"column":42}},{"start":{"line":20,"column":45},"end":{"line":20,"column":63}}]},"3":{"line":28,"type":"binary-expr","locations":[{"start":{"line":28,"column":9},"end":{"line":28,"column":35}},{"start":{"line":28,"column":39},"end":{"line":28,"column":63}}]},"4":{"line":29,"type":"if","locations":[{"start":{"line":29,"column":4},"end":{"line":29,"column":4}},{"start":{"line":29,"column":4},"end":{"line":29,"column":4}}]},"5":{"line":32,"type":"if","locations":[{"start":{"line":32,"column":9},"end":{"line":32,"column":9}},{"start":{"line":32,"column":9},"end":{"line":32,"column":9}}]},"6":{"line":35,"type":"if","locations":[{"start":{"line":35,"column":9},"end":{"line":35,"column":9}},{"start":{"line":35,"column":9},"end":{"line":35,"column":9}}]},"7":{"line":38,"type":"if","locations":[{"start":{"line":38,"column":9},"end":{"line":38,"column":9}},{"start":{"line":38,"column":9},"end":{"line":38,"column":9}}]},"8":{"line":41,"type":"if","locations":[{"start":{"line":41,"column":9},"end":{"line":41,"column":9}},{"start":{"line":41,"column":9},"end":{"line":41,"column":9}}]},"9":{"line":45,"type":"if","locations":[{"start":{"line":45,"column":9},"end":{"line":45,"column":9}},{"start":{"line":45,"column":9},"end":{"line":45,"column":9}}]},"10":{"line":49,"type":"if","locations":[{"start":{"line":49,"column":9},"end":{"line":49,"column":9}},{"start":{"line":49,"column":9},"end":{"line":49,"column":9}}]},"11":{"line":57,"type":"if","locations":[{"start":{"line":57,"column":9},"end":{"line":57,"column":9}},{"start":{"line":57,"column":9},"end":{"line":57,"column":9}}]},"12":{"line":67,"type":"if","locations":[{"start":{"line":67,"column":6},"end":{"line":67,"column":6}},{"start":{"line":67,"column":6},"end":{"line":67,"column":6}}]},"13":{"line":85,"type":"if","locations":[{"start":{"line":85,"column":2},"end":{"line":85,"column":2}},{"start":{"line":85,"column":2},"end":{"line":85,"column":2}}]},"14":{"line":85,"type":"binary-expr","locations":[{"start":{"line":85,"column":6},"end":{"line":85,"column":32}},{"start":{"line":85,"column":36},"end":{"line":85,"column":60}}]},"15":{"line":86,"type":"if","locations":[{"start":{"line":86,"column":4},"end":{"line":86,"column":4}},{"start":{"line":86,"column":4},"end":{"line":86,"column":4}}]},"16":{"line":88,"type":"cond-expr","locations":[{"start":{"line":88,"column":34},"end":{"line":88,"column":40}},{"start":{"line":88,"column":43},"end":{"line":88,"column":54}}]},"17":{"line":89,"type":"if","locations":[{"start":{"line":89,"column":6},"end":{"line":89,"column":6}},{"start":{"line":89,"column":6},"end":{"line":89,"column":6}}]},"18":{"line":101,"type":"if","locations":[{"start":{"line":101,"column":6},"end":{"line":101,"column":6}},{"start":{"line":101,"column":6},"end":{"line":101,"column":6}}]},"19":{"line":102,"type":"if","locations":[{"start":{"line":102,"column":6},"end":{"line":102,"column":6}},{"start":{"line":102,"column":6},"end":{"line":102,"column":6}}]}}}} \ No newline at end of file +{"/home/webreflection/code/domdiff/cjs/index.js":{"path":"/home/webreflection/code/domdiff/cjs/index.js","s":{"1":1,"2":561,"3":1,"4":104,"5":104,"6":104,"7":104,"8":104,"9":104,"10":104,"11":104,"12":104,"13":104,"14":462,"15":44,"16":418,"17":12,"18":406,"19":22,"20":384,"21":5,"22":379,"23":142,"24":142,"25":237,"26":52,"27":52,"28":185,"29":55,"30":55,"31":55,"32":130,"33":28,"34":28,"35":28,"36":102,"37":102,"38":57,"39":57,"40":45,"41":45,"42":45,"43":45,"44":104,"45":83,"46":32,"47":32,"48":32,"49":16,"50":16,"51":16,"52":48,"53":16,"54":51,"55":24,"56":27,"57":27,"58":27,"59":27,"60":104,"61":1},"b":{"1":[104,102],"2":[53,51],"3":[566,513],"4":[44,418],"5":[12,406],"6":[22,384],"7":[5,379],"8":[142,237],"9":[52,185],"10":[55,130],"11":[28,102],"12":[57,45],"13":[83,21],"14":[104,53],"15":[32,51],"16":[23,9],"17":[16,16],"18":[24,27]},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":10,"column":0},"end":{"line":10,"column":24}},"2":{"start":{"line":10,"column":22},"end":{"line":10,"column":23}},"3":{"start":{"line":12,"column":0},"end":{"line":116,"column":2}},"4":{"start":{"line":19,"column":2},"end":{"line":19,"column":34}},"5":{"start":{"line":20,"column":2},"end":{"line":20,"column":64}},"6":{"start":{"line":21,"column":2},"end":{"line":21,"column":40}},"7":{"start":{"line":22,"column":2},"end":{"line":22,"column":43}},"8":{"start":{"line":23,"column":2},"end":{"line":23,"column":41}},"9":{"start":{"line":24,"column":2},"end":{"line":24,"column":48}},"10":{"start":{"line":25,"column":2},"end":{"line":25,"column":41}},"11":{"start":{"line":26,"column":2},"end":{"line":26,"column":39}},"12":{"start":{"line":27,"column":2},"end":{"line":27,"column":45}},"13":{"start":{"line":28,"column":2},"end":{"line":84,"column":3}},"14":{"start":{"line":29,"column":4},"end":{"line":83,"column":5}},"15":{"start":{"line":30,"column":6},"end":{"line":30,"column":54}},"16":{"start":{"line":32,"column":9},"end":{"line":83,"column":5}},"17":{"start":{"line":33,"column":6},"end":{"line":33,"column":50}},"18":{"start":{"line":35,"column":9},"end":{"line":83,"column":5}},"19":{"start":{"line":36,"column":6},"end":{"line":36,"column":51}},"20":{"start":{"line":38,"column":9},"end":{"line":83,"column":5}},"21":{"start":{"line":39,"column":6},"end":{"line":39,"column":47}},"22":{"start":{"line":41,"column":9},"end":{"line":83,"column":5}},"23":{"start":{"line":42,"column":6},"end":{"line":42,"column":54}},"24":{"start":{"line":43,"column":6},"end":{"line":43,"column":51}},"25":{"start":{"line":45,"column":9},"end":{"line":83,"column":5}},"26":{"start":{"line":46,"column":6},"end":{"line":46,"column":50}},"27":{"start":{"line":47,"column":6},"end":{"line":47,"column":47}},"28":{"start":{"line":49,"column":9},"end":{"line":83,"column":5}},"29":{"start":{"line":50,"column":6},"end":{"line":53,"column":8}},"30":{"start":{"line":54,"column":6},"end":{"line":54,"column":54}},"31":{"start":{"line":55,"column":6},"end":{"line":55,"column":47}},"32":{"start":{"line":57,"column":9},"end":{"line":83,"column":5}},"33":{"start":{"line":58,"column":6},"end":{"line":61,"column":8}},"34":{"start":{"line":62,"column":6},"end":{"line":62,"column":50}},"35":{"start":{"line":63,"column":6},"end":{"line":63,"column":51}},"36":{"start":{"line":66,"column":6},"end":{"line":66,"column":56}},"37":{"start":{"line":67,"column":6},"end":{"line":82,"column":7}},"38":{"start":{"line":68,"column":8},"end":{"line":71,"column":10}},"39":{"start":{"line":72,"column":8},"end":{"line":72,"column":53}},"40":{"start":{"line":75,"column":8},"end":{"line":75,"column":37}},"41":{"start":{"line":76,"column":8},"end":{"line":76,"column":35}},"42":{"start":{"line":77,"column":8},"end":{"line":80,"column":10}},"43":{"start":{"line":81,"column":8},"end":{"line":81,"column":53}},"44":{"start":{"line":85,"column":2},"end":{"line":114,"column":3}},"45":{"start":{"line":86,"column":4},"end":{"line":113,"column":5}},"46":{"start":{"line":87,"column":6},"end":{"line":87,"column":45}},"47":{"start":{"line":88,"column":6},"end":{"line":88,"column":55}},"48":{"start":{"line":89,"column":6},"end":{"line":98,"column":7}},"49":{"start":{"line":90,"column":8},"end":{"line":90,"column":73}},"50":{"start":{"line":93,"column":8},"end":{"line":93,"column":75}},"51":{"start":{"line":94,"column":8},"end":{"line":96,"column":9}},"52":{"start":{"line":95,"column":10},"end":{"line":95,"column":67}},"53":{"start":{"line":97,"column":8},"end":{"line":97,"column":49}},"54":{"start":{"line":104,"column":6},"end":{"line":112,"column":7}},"55":{"start":{"line":105,"column":8},"end":{"line":105,"column":68}},"56":{"start":{"line":108,"column":8},"end":{"line":108,"column":61}},"57":{"start":{"line":109,"column":8},"end":{"line":109,"column":66}},"58":{"start":{"line":110,"column":8},"end":{"line":110,"column":61}},"59":{"start":{"line":111,"column":8},"end":{"line":111,"column":31}},"60":{"start":{"line":115,"column":2},"end":{"line":115,"column":21}},"61":{"start":{"line":118,"column":0},"end":{"line":118,"column":78}}},"branchMap":{"1":{"line":19,"type":"binary-expr","locations":[{"start":{"line":19,"column":14},"end":{"line":19,"column":21}},{"start":{"line":19,"column":25},"end":{"line":19,"column":33}}]},"2":{"line":20,"type":"cond-expr","locations":[{"start":{"line":20,"column":38},"end":{"line":20,"column":42}},{"start":{"line":20,"column":45},"end":{"line":20,"column":63}}]},"3":{"line":28,"type":"binary-expr","locations":[{"start":{"line":28,"column":9},"end":{"line":28,"column":35}},{"start":{"line":28,"column":39},"end":{"line":28,"column":63}}]},"4":{"line":29,"type":"if","locations":[{"start":{"line":29,"column":4},"end":{"line":29,"column":4}},{"start":{"line":29,"column":4},"end":{"line":29,"column":4}}]},"5":{"line":32,"type":"if","locations":[{"start":{"line":32,"column":9},"end":{"line":32,"column":9}},{"start":{"line":32,"column":9},"end":{"line":32,"column":9}}]},"6":{"line":35,"type":"if","locations":[{"start":{"line":35,"column":9},"end":{"line":35,"column":9}},{"start":{"line":35,"column":9},"end":{"line":35,"column":9}}]},"7":{"line":38,"type":"if","locations":[{"start":{"line":38,"column":9},"end":{"line":38,"column":9}},{"start":{"line":38,"column":9},"end":{"line":38,"column":9}}]},"8":{"line":41,"type":"if","locations":[{"start":{"line":41,"column":9},"end":{"line":41,"column":9}},{"start":{"line":41,"column":9},"end":{"line":41,"column":9}}]},"9":{"line":45,"type":"if","locations":[{"start":{"line":45,"column":9},"end":{"line":45,"column":9}},{"start":{"line":45,"column":9},"end":{"line":45,"column":9}}]},"10":{"line":49,"type":"if","locations":[{"start":{"line":49,"column":9},"end":{"line":49,"column":9}},{"start":{"line":49,"column":9},"end":{"line":49,"column":9}}]},"11":{"line":57,"type":"if","locations":[{"start":{"line":57,"column":9},"end":{"line":57,"column":9}},{"start":{"line":57,"column":9},"end":{"line":57,"column":9}}]},"12":{"line":67,"type":"if","locations":[{"start":{"line":67,"column":6},"end":{"line":67,"column":6}},{"start":{"line":67,"column":6},"end":{"line":67,"column":6}}]},"13":{"line":85,"type":"if","locations":[{"start":{"line":85,"column":2},"end":{"line":85,"column":2}},{"start":{"line":85,"column":2},"end":{"line":85,"column":2}}]},"14":{"line":85,"type":"binary-expr","locations":[{"start":{"line":85,"column":6},"end":{"line":85,"column":32}},{"start":{"line":85,"column":36},"end":{"line":85,"column":60}}]},"15":{"line":86,"type":"if","locations":[{"start":{"line":86,"column":4},"end":{"line":86,"column":4}},{"start":{"line":86,"column":4},"end":{"line":86,"column":4}}]},"16":{"line":88,"type":"cond-expr","locations":[{"start":{"line":88,"column":34},"end":{"line":88,"column":40}},{"start":{"line":88,"column":43},"end":{"line":88,"column":54}}]},"17":{"line":89,"type":"if","locations":[{"start":{"line":89,"column":6},"end":{"line":89,"column":6}},{"start":{"line":89,"column":6},"end":{"line":89,"column":6}}]},"18":{"line":104,"type":"if","locations":[{"start":{"line":104,"column":6},"end":{"line":104,"column":6}},{"start":{"line":104,"column":6},"end":{"line":104,"column":6}}]}}}} \ No newline at end of file diff --git a/coverage/lcov-report/cjs/index.html b/coverage/lcov-report/cjs/index.html index 6112ef6..de5eedb 100644 --- a/coverage/lcov-report/cjs/index.html +++ b/coverage/lcov-report/cjs/index.html @@ -22,12 +22,12 @@

100% Statements - 63/63 + 61/61
100% Branches - 38/38 + 36/36
100% @@ -37,7 +37,7 @@

100% Lines - 61/61 + 60/60

@@ -62,13 +62,13 @@

index.js
100% - 63/63 + 61/61 100% - 38/38 + 36/36 100% 0/0 100% - 61/61 + 60/60 @@ -77,7 +77,7 @@

diff --git a/coverage/lcov-report/cjs/index.js.html b/coverage/lcov-report/cjs/index.js.html index 5ae01c0..f6821c3 100644 --- a/coverage/lcov-report/cjs/index.js.html +++ b/coverage/lcov-report/cjs/index.js.html @@ -22,12 +22,12 @@

100% Statements - 63/63 + 61/61
100% Branches - 38/38 + 36/36
100% @@ -37,7 +37,7 @@

100% Lines - 61/61 + 60/60

@@ -159,7 +159,9 @@

114 115 116 -117  +117 +118 +119        @@ -168,7 +170,7 @@

      -559× +561×     @@ -259,15 +261,17 @@

      +  +  +  51× -51× -26× +24×     -25× -25× -25× -25× +27× +27× +27× +27×       @@ -375,7 +379,9 @@

} } else { - if (currentNodes[currentStart] == null) currentStart++; + // TODO: this case never happens but it was previously essential. + // anything to further investigate? + // if (currentNodes[currentStart] == null) currentStart++; if (currentStart === currentEnd) { parentNode.removeChild(get(currentNodes[currentStart], -1)); } @@ -397,7 +403,7 @@

diff --git a/coverage/lcov-report/index.html b/coverage/lcov-report/index.html index b0d0fc0..0dd1575 100644 --- a/coverage/lcov-report/index.html +++ b/coverage/lcov-report/index.html @@ -22,12 +22,12 @@

100% Statements - 63/63 + 61/61
100% Branches - 38/38 + 36/36
100% @@ -37,7 +37,7 @@

100% Lines - 61/61 + 60/60

@@ -62,13 +62,13 @@

cjs/
100% - 63/63 + 61/61 100% - 38/38 + 36/36 100% 0/0 100% - 61/61 + 60/60 @@ -77,7 +77,7 @@

diff --git a/coverage/lcov.info b/coverage/lcov.info index 436880a..f59b516 100644 --- a/coverage/lcov.info +++ b/coverage/lcov.info @@ -2,7 +2,7 @@ TN: SF:/home/webreflection/code/domdiff/cjs/index.js FNF:0 FNH:0 -DA:10,559 +DA:10,561 DA:12,1 DA:19,104 DA:20,104 @@ -54,17 +54,16 @@ DA:93,16 DA:94,16 DA:95,48 DA:97,16 -DA:101,51 -DA:102,51 -DA:103,26 -DA:106,25 -DA:107,25 -DA:108,25 -DA:109,25 -DA:113,104 -DA:116,1 -LF:61 -LH:61 +DA:104,51 +DA:105,24 +DA:108,27 +DA:109,27 +DA:110,27 +DA:111,27 +DA:115,104 +DA:118,1 +LF:60 +LH:60 BRDA:19,1,0,104 BRDA:19,1,1,102 BRDA:20,2,0,53 @@ -99,10 +98,8 @@ BRDA:88,16,0,23 BRDA:88,16,1,9 BRDA:89,17,0,16 BRDA:89,17,1,16 -BRDA:101,18,0,2 -BRDA:101,18,1,49 -BRDA:102,19,0,26 -BRDA:102,19,1,25 -BRF:38 -BRH:38 +BRDA:104,18,0,24 +BRDA:104,18,1,27 +BRF:36 +BRH:36 end_of_record diff --git a/esm/index.js b/esm/index.js index daa72c4..1859844 100644 --- a/esm/index.js +++ b/esm/index.js @@ -97,7 +97,9 @@ const domdiff = ( } } else { - if (currentNodes[currentStart] == null) currentStart++; + // TODO: this case never happens but it was previously essential. + // anything to further investigate? + // if (currentNodes[currentStart] == null) currentStart++; if (currentStart === currentEnd) { parentNode.removeChild(get(currentNodes[currentStart], -1)); } diff --git a/index.js b/index.js index df247ef..ca635d1 100644 --- a/index.js +++ b/index.js @@ -79,7 +79,9 @@ beforeNode // optional item/node to use as insertBefore delimiter parentNode.insertBefore(fragment, place); } } else { - if (currentNodes[currentStart] == null) currentStart++; + // TODO: this case never happens but it was previously essential. + // anything to further investigate? + // if (currentNodes[currentStart] == null) currentStart++; if (currentStart === currentEnd) { parentNode.removeChild(get(currentNodes[currentStart], -1)); } else { diff --git a/min.js b/min.js index 383d5ff..af101ff 100644 --- a/min.js +++ b/min.js @@ -1,2 +1,2 @@ var domdiff=function(){"use strict";/*! (c) 2017 Andrea Giammarchi (ISC) */ -var e=function(e){return e};return function(n,r,l,t,f){for(var i=t||e,s=null==f?null:i(f,0),o=0,u=0,a=r.length-1,c=r[0],v=r[a],d=l.length-1,B=l[0],m=l[d];o<=a&&u<=d;)if(null==c)c=r[++o];else if(null==v)v=r[--a];else if(null==B)B=l[++u];else if(null==m)m=l[--d];else if(c==B)c=r[++o],B=l[++u];else if(v==m)v=r[--a],m=l[--d];else if(c==m)n.insertBefore(i(c,1),i(v,-0).nextSibling),c=r[++o],m=l[--d];else if(v==B)n.insertBefore(i(v,1),i(c,0)),v=r[--a],B=l[++u];else{var g=r.indexOf(B);if(g<0)n.insertBefore(i(B,1),i(c,0)),B=l[++u];else{var h=r[g];r[g]=null,n.insertBefore(i(h,1),i(c,0)),B=l[++u]}}if(o<=a||u<=d)if(o>a){var C=l[d+1],D=null==C?s:i(C,0);if(u===d)n.insertBefore(i(l[u],1),D);else{for(var p=n.ownerDocument.createDocumentFragment();u<=d;)p.appendChild(i(l[u++],1));n.insertBefore(p,D)}}else if(null==r[o]&&o++,o===a)n.removeChild(i(r[o],-1));else{var w=n.ownerDocument.createRange();w.setStartBefore(i(r[o],-1)),w.setEndAfter(i(r[a],-1)),w.deleteContents()}return l}}(); \ No newline at end of file +var e=function(e){return e};return function(n,r,l,t,f){for(var i=t||e,s=null==f?null:i(f,0),o=0,u=0,a=r.length-1,c=r[0],v=r[a],d=l.length-1,B=l[0],m=l[d];o<=a&&u<=d;)if(null==c)c=r[++o];else if(null==v)v=r[--a];else if(null==B)B=l[++u];else if(null==m)m=l[--d];else if(c==B)c=r[++o],B=l[++u];else if(v==m)v=r[--a],m=l[--d];else if(c==m)n.insertBefore(i(c,1),i(v,-0).nextSibling),c=r[++o],m=l[--d];else if(v==B)n.insertBefore(i(v,1),i(c,0)),v=r[--a],B=l[++u];else{var g=r.indexOf(B);if(g<0)n.insertBefore(i(B,1),i(c,0)),B=l[++u];else{var h=r[g];r[g]=null,n.insertBefore(i(h,1),i(c,0)),B=l[++u]}}if(o<=a||u<=d)if(o>a){var C=l[d+1],D=null==C?s:i(C,0);if(u===d)n.insertBefore(i(l[u],1),D);else{for(var p=n.ownerDocument.createDocumentFragment();u<=d;)p.appendChild(i(l[u++],1));n.insertBefore(p,D)}}else if(o===a)n.removeChild(i(r[o],-1));else{var w=n.ownerDocument.createRange();w.setStartBefore(i(r[o],-1)),w.setEndAfter(i(r[a],-1)),w.deleteContents()}return l}}(); \ No newline at end of file From 585cdaa18faea353e3a82086762809e7a17af21a Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Mon, 11 Dec 2017 17:24:40 -0200 Subject: [PATCH 21/71] 0.3.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d81b013..25561d2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "domdiff", - "version": "0.3.3", + "version": "0.3.4", "description": "A fast and simple way to diff childNodes", "browser": "min.js", "main": "cjs/index.js", From 80c53d0233dee0f03a5acb2a7ce15981fd5608a2 Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Tue, 12 Dec 2017 14:42:52 -0200 Subject: [PATCH 22/71] fixed typo in .npmignore --- .npmignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.npmignore b/.npmignore index 391f31b..ab01da5 100644 --- a/.npmignore +++ b/.npmignore @@ -8,4 +8,4 @@ _config.yml .travis.yml babel-plugins.json package-lock.json -rollup.coinfig.js \ No newline at end of file +rollup.config.js \ No newline at end of file From cca7777e455417efadef6f07ec4941d28748a46e Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Tue, 12 Dec 2017 14:42:55 -0200 Subject: [PATCH 23/71] 0.3.5 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 25561d2..3f3d528 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "domdiff", - "version": "0.3.4", + "version": "0.3.5", "description": "A fast and simple way to diff childNodes", "browser": "min.js", "main": "cjs/index.js", From fec460f595c8a8c254644d861430ec17d3b234aa Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Fri, 19 Jan 2018 21:10:12 +0100 Subject: [PATCH 24/71] fixed null node --- cjs/index.js | 4 +--- coverage/coverage.json | 2 +- coverage/lcov-report/cjs/index.html | 14 +++++------ coverage/lcov-report/cjs/index.js.html | 32 ++++++++++--------------- coverage/lcov-report/index.html | 14 +++++------ coverage/lcov.info | 33 ++++++++++++++------------ esm/index.js | 4 +--- index.js | 4 +--- min.js | 2 +- 9 files changed, 50 insertions(+), 59 deletions(-) diff --git a/cjs/index.js b/cjs/index.js index 7dcef1d..d67feb5 100644 --- a/cjs/index.js +++ b/cjs/index.js @@ -98,9 +98,7 @@ const domdiff = ( } } else { - // TODO: this case never happens but it was previously essential. - // anything to further investigate? - // if (currentNodes[currentStart] == null) currentStart++; + if (currentNodes[currentStart] == null) currentStart++; if (currentStart === currentEnd) { parentNode.removeChild(get(currentNodes[currentStart], -1)); } diff --git a/coverage/coverage.json b/coverage/coverage.json index 210b250..efce9cf 100644 --- a/coverage/coverage.json +++ b/coverage/coverage.json @@ -1 +1 @@ -{"/home/webreflection/code/domdiff/cjs/index.js":{"path":"/home/webreflection/code/domdiff/cjs/index.js","s":{"1":1,"2":561,"3":1,"4":104,"5":104,"6":104,"7":104,"8":104,"9":104,"10":104,"11":104,"12":104,"13":104,"14":462,"15":44,"16":418,"17":12,"18":406,"19":22,"20":384,"21":5,"22":379,"23":142,"24":142,"25":237,"26":52,"27":52,"28":185,"29":55,"30":55,"31":55,"32":130,"33":28,"34":28,"35":28,"36":102,"37":102,"38":57,"39":57,"40":45,"41":45,"42":45,"43":45,"44":104,"45":83,"46":32,"47":32,"48":32,"49":16,"50":16,"51":16,"52":48,"53":16,"54":51,"55":24,"56":27,"57":27,"58":27,"59":27,"60":104,"61":1},"b":{"1":[104,102],"2":[53,51],"3":[566,513],"4":[44,418],"5":[12,406],"6":[22,384],"7":[5,379],"8":[142,237],"9":[52,185],"10":[55,130],"11":[28,102],"12":[57,45],"13":[83,21],"14":[104,53],"15":[32,51],"16":[23,9],"17":[16,16],"18":[24,27]},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":10,"column":0},"end":{"line":10,"column":24}},"2":{"start":{"line":10,"column":22},"end":{"line":10,"column":23}},"3":{"start":{"line":12,"column":0},"end":{"line":116,"column":2}},"4":{"start":{"line":19,"column":2},"end":{"line":19,"column":34}},"5":{"start":{"line":20,"column":2},"end":{"line":20,"column":64}},"6":{"start":{"line":21,"column":2},"end":{"line":21,"column":40}},"7":{"start":{"line":22,"column":2},"end":{"line":22,"column":43}},"8":{"start":{"line":23,"column":2},"end":{"line":23,"column":41}},"9":{"start":{"line":24,"column":2},"end":{"line":24,"column":48}},"10":{"start":{"line":25,"column":2},"end":{"line":25,"column":41}},"11":{"start":{"line":26,"column":2},"end":{"line":26,"column":39}},"12":{"start":{"line":27,"column":2},"end":{"line":27,"column":45}},"13":{"start":{"line":28,"column":2},"end":{"line":84,"column":3}},"14":{"start":{"line":29,"column":4},"end":{"line":83,"column":5}},"15":{"start":{"line":30,"column":6},"end":{"line":30,"column":54}},"16":{"start":{"line":32,"column":9},"end":{"line":83,"column":5}},"17":{"start":{"line":33,"column":6},"end":{"line":33,"column":50}},"18":{"start":{"line":35,"column":9},"end":{"line":83,"column":5}},"19":{"start":{"line":36,"column":6},"end":{"line":36,"column":51}},"20":{"start":{"line":38,"column":9},"end":{"line":83,"column":5}},"21":{"start":{"line":39,"column":6},"end":{"line":39,"column":47}},"22":{"start":{"line":41,"column":9},"end":{"line":83,"column":5}},"23":{"start":{"line":42,"column":6},"end":{"line":42,"column":54}},"24":{"start":{"line":43,"column":6},"end":{"line":43,"column":51}},"25":{"start":{"line":45,"column":9},"end":{"line":83,"column":5}},"26":{"start":{"line":46,"column":6},"end":{"line":46,"column":50}},"27":{"start":{"line":47,"column":6},"end":{"line":47,"column":47}},"28":{"start":{"line":49,"column":9},"end":{"line":83,"column":5}},"29":{"start":{"line":50,"column":6},"end":{"line":53,"column":8}},"30":{"start":{"line":54,"column":6},"end":{"line":54,"column":54}},"31":{"start":{"line":55,"column":6},"end":{"line":55,"column":47}},"32":{"start":{"line":57,"column":9},"end":{"line":83,"column":5}},"33":{"start":{"line":58,"column":6},"end":{"line":61,"column":8}},"34":{"start":{"line":62,"column":6},"end":{"line":62,"column":50}},"35":{"start":{"line":63,"column":6},"end":{"line":63,"column":51}},"36":{"start":{"line":66,"column":6},"end":{"line":66,"column":56}},"37":{"start":{"line":67,"column":6},"end":{"line":82,"column":7}},"38":{"start":{"line":68,"column":8},"end":{"line":71,"column":10}},"39":{"start":{"line":72,"column":8},"end":{"line":72,"column":53}},"40":{"start":{"line":75,"column":8},"end":{"line":75,"column":37}},"41":{"start":{"line":76,"column":8},"end":{"line":76,"column":35}},"42":{"start":{"line":77,"column":8},"end":{"line":80,"column":10}},"43":{"start":{"line":81,"column":8},"end":{"line":81,"column":53}},"44":{"start":{"line":85,"column":2},"end":{"line":114,"column":3}},"45":{"start":{"line":86,"column":4},"end":{"line":113,"column":5}},"46":{"start":{"line":87,"column":6},"end":{"line":87,"column":45}},"47":{"start":{"line":88,"column":6},"end":{"line":88,"column":55}},"48":{"start":{"line":89,"column":6},"end":{"line":98,"column":7}},"49":{"start":{"line":90,"column":8},"end":{"line":90,"column":73}},"50":{"start":{"line":93,"column":8},"end":{"line":93,"column":75}},"51":{"start":{"line":94,"column":8},"end":{"line":96,"column":9}},"52":{"start":{"line":95,"column":10},"end":{"line":95,"column":67}},"53":{"start":{"line":97,"column":8},"end":{"line":97,"column":49}},"54":{"start":{"line":104,"column":6},"end":{"line":112,"column":7}},"55":{"start":{"line":105,"column":8},"end":{"line":105,"column":68}},"56":{"start":{"line":108,"column":8},"end":{"line":108,"column":61}},"57":{"start":{"line":109,"column":8},"end":{"line":109,"column":66}},"58":{"start":{"line":110,"column":8},"end":{"line":110,"column":61}},"59":{"start":{"line":111,"column":8},"end":{"line":111,"column":31}},"60":{"start":{"line":115,"column":2},"end":{"line":115,"column":21}},"61":{"start":{"line":118,"column":0},"end":{"line":118,"column":78}}},"branchMap":{"1":{"line":19,"type":"binary-expr","locations":[{"start":{"line":19,"column":14},"end":{"line":19,"column":21}},{"start":{"line":19,"column":25},"end":{"line":19,"column":33}}]},"2":{"line":20,"type":"cond-expr","locations":[{"start":{"line":20,"column":38},"end":{"line":20,"column":42}},{"start":{"line":20,"column":45},"end":{"line":20,"column":63}}]},"3":{"line":28,"type":"binary-expr","locations":[{"start":{"line":28,"column":9},"end":{"line":28,"column":35}},{"start":{"line":28,"column":39},"end":{"line":28,"column":63}}]},"4":{"line":29,"type":"if","locations":[{"start":{"line":29,"column":4},"end":{"line":29,"column":4}},{"start":{"line":29,"column":4},"end":{"line":29,"column":4}}]},"5":{"line":32,"type":"if","locations":[{"start":{"line":32,"column":9},"end":{"line":32,"column":9}},{"start":{"line":32,"column":9},"end":{"line":32,"column":9}}]},"6":{"line":35,"type":"if","locations":[{"start":{"line":35,"column":9},"end":{"line":35,"column":9}},{"start":{"line":35,"column":9},"end":{"line":35,"column":9}}]},"7":{"line":38,"type":"if","locations":[{"start":{"line":38,"column":9},"end":{"line":38,"column":9}},{"start":{"line":38,"column":9},"end":{"line":38,"column":9}}]},"8":{"line":41,"type":"if","locations":[{"start":{"line":41,"column":9},"end":{"line":41,"column":9}},{"start":{"line":41,"column":9},"end":{"line":41,"column":9}}]},"9":{"line":45,"type":"if","locations":[{"start":{"line":45,"column":9},"end":{"line":45,"column":9}},{"start":{"line":45,"column":9},"end":{"line":45,"column":9}}]},"10":{"line":49,"type":"if","locations":[{"start":{"line":49,"column":9},"end":{"line":49,"column":9}},{"start":{"line":49,"column":9},"end":{"line":49,"column":9}}]},"11":{"line":57,"type":"if","locations":[{"start":{"line":57,"column":9},"end":{"line":57,"column":9}},{"start":{"line":57,"column":9},"end":{"line":57,"column":9}}]},"12":{"line":67,"type":"if","locations":[{"start":{"line":67,"column":6},"end":{"line":67,"column":6}},{"start":{"line":67,"column":6},"end":{"line":67,"column":6}}]},"13":{"line":85,"type":"if","locations":[{"start":{"line":85,"column":2},"end":{"line":85,"column":2}},{"start":{"line":85,"column":2},"end":{"line":85,"column":2}}]},"14":{"line":85,"type":"binary-expr","locations":[{"start":{"line":85,"column":6},"end":{"line":85,"column":32}},{"start":{"line":85,"column":36},"end":{"line":85,"column":60}}]},"15":{"line":86,"type":"if","locations":[{"start":{"line":86,"column":4},"end":{"line":86,"column":4}},{"start":{"line":86,"column":4},"end":{"line":86,"column":4}}]},"16":{"line":88,"type":"cond-expr","locations":[{"start":{"line":88,"column":34},"end":{"line":88,"column":40}},{"start":{"line":88,"column":43},"end":{"line":88,"column":54}}]},"17":{"line":89,"type":"if","locations":[{"start":{"line":89,"column":6},"end":{"line":89,"column":6}},{"start":{"line":89,"column":6},"end":{"line":89,"column":6}}]},"18":{"line":104,"type":"if","locations":[{"start":{"line":104,"column":6},"end":{"line":104,"column":6}},{"start":{"line":104,"column":6},"end":{"line":104,"column":6}}]}}}} \ No newline at end of file +{"/home/webreflection/code/domdiff/cjs/index.js":{"path":"/home/webreflection/code/domdiff/cjs/index.js","s":{"1":1,"2":559,"3":1,"4":104,"5":104,"6":104,"7":104,"8":104,"9":104,"10":104,"11":104,"12":104,"13":104,"14":462,"15":44,"16":418,"17":12,"18":406,"19":22,"20":384,"21":5,"22":379,"23":142,"24":142,"25":237,"26":52,"27":52,"28":185,"29":55,"30":55,"31":55,"32":130,"33":28,"34":28,"35":28,"36":102,"37":102,"38":57,"39":57,"40":45,"41":45,"42":45,"43":45,"44":104,"45":83,"46":32,"47":32,"48":32,"49":16,"50":16,"51":16,"52":48,"53":16,"54":51,"55":2,"56":51,"57":26,"58":25,"59":25,"60":25,"61":25,"62":104,"63":1},"b":{"1":[104,102],"2":[53,51],"3":[566,513],"4":[44,418],"5":[12,406],"6":[22,384],"7":[5,379],"8":[142,237],"9":[52,185],"10":[55,130],"11":[28,102],"12":[57,45],"13":[83,21],"14":[104,53],"15":[32,51],"16":[23,9],"17":[16,16],"18":[2,49],"19":[26,25]},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":10,"column":0},"end":{"line":10,"column":24}},"2":{"start":{"line":10,"column":22},"end":{"line":10,"column":23}},"3":{"start":{"line":12,"column":0},"end":{"line":114,"column":2}},"4":{"start":{"line":19,"column":2},"end":{"line":19,"column":34}},"5":{"start":{"line":20,"column":2},"end":{"line":20,"column":64}},"6":{"start":{"line":21,"column":2},"end":{"line":21,"column":40}},"7":{"start":{"line":22,"column":2},"end":{"line":22,"column":43}},"8":{"start":{"line":23,"column":2},"end":{"line":23,"column":41}},"9":{"start":{"line":24,"column":2},"end":{"line":24,"column":48}},"10":{"start":{"line":25,"column":2},"end":{"line":25,"column":41}},"11":{"start":{"line":26,"column":2},"end":{"line":26,"column":39}},"12":{"start":{"line":27,"column":2},"end":{"line":27,"column":45}},"13":{"start":{"line":28,"column":2},"end":{"line":84,"column":3}},"14":{"start":{"line":29,"column":4},"end":{"line":83,"column":5}},"15":{"start":{"line":30,"column":6},"end":{"line":30,"column":54}},"16":{"start":{"line":32,"column":9},"end":{"line":83,"column":5}},"17":{"start":{"line":33,"column":6},"end":{"line":33,"column":50}},"18":{"start":{"line":35,"column":9},"end":{"line":83,"column":5}},"19":{"start":{"line":36,"column":6},"end":{"line":36,"column":51}},"20":{"start":{"line":38,"column":9},"end":{"line":83,"column":5}},"21":{"start":{"line":39,"column":6},"end":{"line":39,"column":47}},"22":{"start":{"line":41,"column":9},"end":{"line":83,"column":5}},"23":{"start":{"line":42,"column":6},"end":{"line":42,"column":54}},"24":{"start":{"line":43,"column":6},"end":{"line":43,"column":51}},"25":{"start":{"line":45,"column":9},"end":{"line":83,"column":5}},"26":{"start":{"line":46,"column":6},"end":{"line":46,"column":50}},"27":{"start":{"line":47,"column":6},"end":{"line":47,"column":47}},"28":{"start":{"line":49,"column":9},"end":{"line":83,"column":5}},"29":{"start":{"line":50,"column":6},"end":{"line":53,"column":8}},"30":{"start":{"line":54,"column":6},"end":{"line":54,"column":54}},"31":{"start":{"line":55,"column":6},"end":{"line":55,"column":47}},"32":{"start":{"line":57,"column":9},"end":{"line":83,"column":5}},"33":{"start":{"line":58,"column":6},"end":{"line":61,"column":8}},"34":{"start":{"line":62,"column":6},"end":{"line":62,"column":50}},"35":{"start":{"line":63,"column":6},"end":{"line":63,"column":51}},"36":{"start":{"line":66,"column":6},"end":{"line":66,"column":56}},"37":{"start":{"line":67,"column":6},"end":{"line":82,"column":7}},"38":{"start":{"line":68,"column":8},"end":{"line":71,"column":10}},"39":{"start":{"line":72,"column":8},"end":{"line":72,"column":53}},"40":{"start":{"line":75,"column":8},"end":{"line":75,"column":37}},"41":{"start":{"line":76,"column":8},"end":{"line":76,"column":35}},"42":{"start":{"line":77,"column":8},"end":{"line":80,"column":10}},"43":{"start":{"line":81,"column":8},"end":{"line":81,"column":53}},"44":{"start":{"line":85,"column":2},"end":{"line":112,"column":3}},"45":{"start":{"line":86,"column":4},"end":{"line":111,"column":5}},"46":{"start":{"line":87,"column":6},"end":{"line":87,"column":45}},"47":{"start":{"line":88,"column":6},"end":{"line":88,"column":55}},"48":{"start":{"line":89,"column":6},"end":{"line":98,"column":7}},"49":{"start":{"line":90,"column":8},"end":{"line":90,"column":73}},"50":{"start":{"line":93,"column":8},"end":{"line":93,"column":75}},"51":{"start":{"line":94,"column":8},"end":{"line":96,"column":9}},"52":{"start":{"line":95,"column":10},"end":{"line":95,"column":67}},"53":{"start":{"line":97,"column":8},"end":{"line":97,"column":49}},"54":{"start":{"line":101,"column":6},"end":{"line":101,"column":61}},"55":{"start":{"line":101,"column":46},"end":{"line":101,"column":61}},"56":{"start":{"line":102,"column":6},"end":{"line":110,"column":7}},"57":{"start":{"line":103,"column":8},"end":{"line":103,"column":68}},"58":{"start":{"line":106,"column":8},"end":{"line":106,"column":61}},"59":{"start":{"line":107,"column":8},"end":{"line":107,"column":66}},"60":{"start":{"line":108,"column":8},"end":{"line":108,"column":61}},"61":{"start":{"line":109,"column":8},"end":{"line":109,"column":31}},"62":{"start":{"line":113,"column":2},"end":{"line":113,"column":21}},"63":{"start":{"line":116,"column":0},"end":{"line":116,"column":78}}},"branchMap":{"1":{"line":19,"type":"binary-expr","locations":[{"start":{"line":19,"column":14},"end":{"line":19,"column":21}},{"start":{"line":19,"column":25},"end":{"line":19,"column":33}}]},"2":{"line":20,"type":"cond-expr","locations":[{"start":{"line":20,"column":38},"end":{"line":20,"column":42}},{"start":{"line":20,"column":45},"end":{"line":20,"column":63}}]},"3":{"line":28,"type":"binary-expr","locations":[{"start":{"line":28,"column":9},"end":{"line":28,"column":35}},{"start":{"line":28,"column":39},"end":{"line":28,"column":63}}]},"4":{"line":29,"type":"if","locations":[{"start":{"line":29,"column":4},"end":{"line":29,"column":4}},{"start":{"line":29,"column":4},"end":{"line":29,"column":4}}]},"5":{"line":32,"type":"if","locations":[{"start":{"line":32,"column":9},"end":{"line":32,"column":9}},{"start":{"line":32,"column":9},"end":{"line":32,"column":9}}]},"6":{"line":35,"type":"if","locations":[{"start":{"line":35,"column":9},"end":{"line":35,"column":9}},{"start":{"line":35,"column":9},"end":{"line":35,"column":9}}]},"7":{"line":38,"type":"if","locations":[{"start":{"line":38,"column":9},"end":{"line":38,"column":9}},{"start":{"line":38,"column":9},"end":{"line":38,"column":9}}]},"8":{"line":41,"type":"if","locations":[{"start":{"line":41,"column":9},"end":{"line":41,"column":9}},{"start":{"line":41,"column":9},"end":{"line":41,"column":9}}]},"9":{"line":45,"type":"if","locations":[{"start":{"line":45,"column":9},"end":{"line":45,"column":9}},{"start":{"line":45,"column":9},"end":{"line":45,"column":9}}]},"10":{"line":49,"type":"if","locations":[{"start":{"line":49,"column":9},"end":{"line":49,"column":9}},{"start":{"line":49,"column":9},"end":{"line":49,"column":9}}]},"11":{"line":57,"type":"if","locations":[{"start":{"line":57,"column":9},"end":{"line":57,"column":9}},{"start":{"line":57,"column":9},"end":{"line":57,"column":9}}]},"12":{"line":67,"type":"if","locations":[{"start":{"line":67,"column":6},"end":{"line":67,"column":6}},{"start":{"line":67,"column":6},"end":{"line":67,"column":6}}]},"13":{"line":85,"type":"if","locations":[{"start":{"line":85,"column":2},"end":{"line":85,"column":2}},{"start":{"line":85,"column":2},"end":{"line":85,"column":2}}]},"14":{"line":85,"type":"binary-expr","locations":[{"start":{"line":85,"column":6},"end":{"line":85,"column":32}},{"start":{"line":85,"column":36},"end":{"line":85,"column":60}}]},"15":{"line":86,"type":"if","locations":[{"start":{"line":86,"column":4},"end":{"line":86,"column":4}},{"start":{"line":86,"column":4},"end":{"line":86,"column":4}}]},"16":{"line":88,"type":"cond-expr","locations":[{"start":{"line":88,"column":34},"end":{"line":88,"column":40}},{"start":{"line":88,"column":43},"end":{"line":88,"column":54}}]},"17":{"line":89,"type":"if","locations":[{"start":{"line":89,"column":6},"end":{"line":89,"column":6}},{"start":{"line":89,"column":6},"end":{"line":89,"column":6}}]},"18":{"line":101,"type":"if","locations":[{"start":{"line":101,"column":6},"end":{"line":101,"column":6}},{"start":{"line":101,"column":6},"end":{"line":101,"column":6}}]},"19":{"line":102,"type":"if","locations":[{"start":{"line":102,"column":6},"end":{"line":102,"column":6}},{"start":{"line":102,"column":6},"end":{"line":102,"column":6}}]}}}} \ No newline at end of file diff --git a/coverage/lcov-report/cjs/index.html b/coverage/lcov-report/cjs/index.html index de5eedb..df61d5f 100644 --- a/coverage/lcov-report/cjs/index.html +++ b/coverage/lcov-report/cjs/index.html @@ -22,12 +22,12 @@

100% Statements - 61/61 + 63/63
100% Branches - 36/36 + 38/38
100% @@ -37,7 +37,7 @@

100% Lines - 60/60 + 61/61

@@ -62,13 +62,13 @@

index.js
100% - 61/61 + 63/63 100% - 36/36 + 38/38 100% 0/0 100% - 60/60 + 61/61 @@ -77,7 +77,7 @@

diff --git a/coverage/lcov-report/cjs/index.js.html b/coverage/lcov-report/cjs/index.js.html index f6821c3..441dc92 100644 --- a/coverage/lcov-report/cjs/index.js.html +++ b/coverage/lcov-report/cjs/index.js.html @@ -22,12 +22,12 @@

100% Statements - 61/61 + 63/63
100% Branches - 36/36 + 38/38
100% @@ -37,7 +37,7 @@

100% Lines - 60/60 + 61/61

@@ -159,9 +159,7 @@

114 115 116 -117 -118 -119  +117        @@ -170,7 +168,7 @@

      -561× +559×     @@ -261,17 +259,15 @@

      -  -  -  51× -24× +51× +26×     -27× -27× -27× -27× +25× +25× +25× +25×       @@ -379,9 +375,7 @@

} } else { - // TODO: this case never happens but it was previously essential. - // anything to further investigate? - // if (currentNodes[currentStart] == null) currentStart++; + if (currentNodes[currentStart] == null) currentStart++; if (currentStart === currentEnd) { parentNode.removeChild(get(currentNodes[currentStart], -1)); } @@ -403,7 +397,7 @@

diff --git a/coverage/lcov-report/index.html b/coverage/lcov-report/index.html index 0dd1575..562cfee 100644 --- a/coverage/lcov-report/index.html +++ b/coverage/lcov-report/index.html @@ -22,12 +22,12 @@

100% Statements - 61/61 + 63/63
100% Branches - 36/36 + 38/38
100% @@ -37,7 +37,7 @@

100% Lines - 60/60 + 61/61

@@ -62,13 +62,13 @@

cjs/
100% - 61/61 + 63/63 100% - 36/36 + 38/38 100% 0/0 100% - 60/60 + 61/61 @@ -77,7 +77,7 @@

diff --git a/coverage/lcov.info b/coverage/lcov.info index f59b516..436880a 100644 --- a/coverage/lcov.info +++ b/coverage/lcov.info @@ -2,7 +2,7 @@ TN: SF:/home/webreflection/code/domdiff/cjs/index.js FNF:0 FNH:0 -DA:10,561 +DA:10,559 DA:12,1 DA:19,104 DA:20,104 @@ -54,16 +54,17 @@ DA:93,16 DA:94,16 DA:95,48 DA:97,16 -DA:104,51 -DA:105,24 -DA:108,27 -DA:109,27 -DA:110,27 -DA:111,27 -DA:115,104 -DA:118,1 -LF:60 -LH:60 +DA:101,51 +DA:102,51 +DA:103,26 +DA:106,25 +DA:107,25 +DA:108,25 +DA:109,25 +DA:113,104 +DA:116,1 +LF:61 +LH:61 BRDA:19,1,0,104 BRDA:19,1,1,102 BRDA:20,2,0,53 @@ -98,8 +99,10 @@ BRDA:88,16,0,23 BRDA:88,16,1,9 BRDA:89,17,0,16 BRDA:89,17,1,16 -BRDA:104,18,0,24 -BRDA:104,18,1,27 -BRF:36 -BRH:36 +BRDA:101,18,0,2 +BRDA:101,18,1,49 +BRDA:102,19,0,26 +BRDA:102,19,1,25 +BRF:38 +BRH:38 end_of_record diff --git a/esm/index.js b/esm/index.js index 1859844..daa72c4 100644 --- a/esm/index.js +++ b/esm/index.js @@ -97,9 +97,7 @@ const domdiff = ( } } else { - // TODO: this case never happens but it was previously essential. - // anything to further investigate? - // if (currentNodes[currentStart] == null) currentStart++; + if (currentNodes[currentStart] == null) currentStart++; if (currentStart === currentEnd) { parentNode.removeChild(get(currentNodes[currentStart], -1)); } diff --git a/index.js b/index.js index ca635d1..df247ef 100644 --- a/index.js +++ b/index.js @@ -79,9 +79,7 @@ beforeNode // optional item/node to use as insertBefore delimiter parentNode.insertBefore(fragment, place); } } else { - // TODO: this case never happens but it was previously essential. - // anything to further investigate? - // if (currentNodes[currentStart] == null) currentStart++; + if (currentNodes[currentStart] == null) currentStart++; if (currentStart === currentEnd) { parentNode.removeChild(get(currentNodes[currentStart], -1)); } else { diff --git a/min.js b/min.js index af101ff..383d5ff 100644 --- a/min.js +++ b/min.js @@ -1,2 +1,2 @@ var domdiff=function(){"use strict";/*! (c) 2017 Andrea Giammarchi (ISC) */ -var e=function(e){return e};return function(n,r,l,t,f){for(var i=t||e,s=null==f?null:i(f,0),o=0,u=0,a=r.length-1,c=r[0],v=r[a],d=l.length-1,B=l[0],m=l[d];o<=a&&u<=d;)if(null==c)c=r[++o];else if(null==v)v=r[--a];else if(null==B)B=l[++u];else if(null==m)m=l[--d];else if(c==B)c=r[++o],B=l[++u];else if(v==m)v=r[--a],m=l[--d];else if(c==m)n.insertBefore(i(c,1),i(v,-0).nextSibling),c=r[++o],m=l[--d];else if(v==B)n.insertBefore(i(v,1),i(c,0)),v=r[--a],B=l[++u];else{var g=r.indexOf(B);if(g<0)n.insertBefore(i(B,1),i(c,0)),B=l[++u];else{var h=r[g];r[g]=null,n.insertBefore(i(h,1),i(c,0)),B=l[++u]}}if(o<=a||u<=d)if(o>a){var C=l[d+1],D=null==C?s:i(C,0);if(u===d)n.insertBefore(i(l[u],1),D);else{for(var p=n.ownerDocument.createDocumentFragment();u<=d;)p.appendChild(i(l[u++],1));n.insertBefore(p,D)}}else if(o===a)n.removeChild(i(r[o],-1));else{var w=n.ownerDocument.createRange();w.setStartBefore(i(r[o],-1)),w.setEndAfter(i(r[a],-1)),w.deleteContents()}return l}}(); \ No newline at end of file +var e=function(e){return e};return function(n,r,l,t,f){for(var i=t||e,s=null==f?null:i(f,0),o=0,u=0,a=r.length-1,c=r[0],v=r[a],d=l.length-1,B=l[0],m=l[d];o<=a&&u<=d;)if(null==c)c=r[++o];else if(null==v)v=r[--a];else if(null==B)B=l[++u];else if(null==m)m=l[--d];else if(c==B)c=r[++o],B=l[++u];else if(v==m)v=r[--a],m=l[--d];else if(c==m)n.insertBefore(i(c,1),i(v,-0).nextSibling),c=r[++o],m=l[--d];else if(v==B)n.insertBefore(i(v,1),i(c,0)),v=r[--a],B=l[++u];else{var g=r.indexOf(B);if(g<0)n.insertBefore(i(B,1),i(c,0)),B=l[++u];else{var h=r[g];r[g]=null,n.insertBefore(i(h,1),i(c,0)),B=l[++u]}}if(o<=a||u<=d)if(o>a){var C=l[d+1],D=null==C?s:i(C,0);if(u===d)n.insertBefore(i(l[u],1),D);else{for(var p=n.ownerDocument.createDocumentFragment();u<=d;)p.appendChild(i(l[u++],1));n.insertBefore(p,D)}}else if(null==r[o]&&o++,o===a)n.removeChild(i(r[o],-1));else{var w=n.ownerDocument.createRange();w.setStartBefore(i(r[o],-1)),w.setEndAfter(i(r[a],-1)),w.deleteContents()}return l}}(); \ No newline at end of file From 2d69ec22a404d8d737787e38764c4393188a1c4b Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Fri, 19 Jan 2018 21:10:25 +0100 Subject: [PATCH 25/71] 0.3.6 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3f3d528..34b6f67 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "domdiff", - "version": "0.3.5", + "version": "0.3.6", "description": "A fast and simple way to diff childNodes", "browser": "min.js", "main": "cjs/index.js", From a57a7a4ec9b03f2422f151a087653162d7501767 Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Sat, 7 Apr 2018 18:31:47 +0200 Subject: [PATCH 26/71] fix #4 - improved performance for segments and list scroll --- cjs/index.js | 53 ++++-- coverage/coverage.json | 2 +- coverage/lcov-report/cjs/index.html | 14 +- coverage/lcov-report/cjs/index.js.html | 213 +++++++++++++++++------- coverage/lcov-report/index.html | 14 +- coverage/lcov.info | 220 ++++++++++++++----------- esm/index.js | 53 ++++-- index.js | 38 ++++- min.js | 2 +- 9 files changed, 404 insertions(+), 205 deletions(-) diff --git a/cjs/index.js b/cjs/index.js index d67feb5..5ed255d 100644 --- a/cjs/index.js +++ b/cjs/index.js @@ -9,6 +9,13 @@ const identity = O => O; +const remove = (parentNode, before, after) => { + const range = parentNode.ownerDocument.createRange(); + range.setStartBefore(before); + range.setEndAfter(after); + range.deleteContents(); +}; + const domdiff = ( parentNode, // where changes happen currentNodes, // Array of current items/nodes @@ -72,13 +79,36 @@ const domdiff = ( futureStartNode = futureNodes[++futureStart]; } else { - let el = currentNodes[index]; - currentNodes[index] = null; - parentNode.insertBefore( - get(el, 1), - get(currentStartNode, 0) - ); - futureStartNode = futureNodes[++futureStart]; + let i = index; + let f = futureStart; + while ( + i <= currentEnd && + f <= futureEnd && + currentNodes[i] === futureNodes[f] + ) { + i++; + f++; + } + if (1 < (i - index)) { + if (--index === currentStart) { + parentNode.removeChild(get(currentStartNode, -1)); + } else { + remove( + parentNode, + get(currentStartNode, -1), + get(currentNodes[index], -1) + ); + } + currentStart = i; + futureStart = f; + currentStartNode = currentNodes[i]; + futureStartNode = futureNodes[f]; + } else { + const el = currentNodes[index]; + currentNodes[index] = null; + parentNode.insertBefore(get(el, 1), get(currentStartNode, 0)); + futureStartNode = futureNodes[++futureStart]; + } } } } @@ -103,10 +133,11 @@ const domdiff = ( parentNode.removeChild(get(currentNodes[currentStart], -1)); } else { - const range = parentNode.ownerDocument.createRange(); - range.setStartBefore(get(currentNodes[currentStart], -1)); - range.setEndAfter(get(currentNodes[currentEnd], -1)); - range.deleteContents(); + remove( + parentNode, + get(currentNodes[currentStart], -1), + get(currentNodes[currentEnd], -1) + ); } } } diff --git a/coverage/coverage.json b/coverage/coverage.json index efce9cf..4f35bed 100644 --- a/coverage/coverage.json +++ b/coverage/coverage.json @@ -1 +1 @@ -{"/home/webreflection/code/domdiff/cjs/index.js":{"path":"/home/webreflection/code/domdiff/cjs/index.js","s":{"1":1,"2":559,"3":1,"4":104,"5":104,"6":104,"7":104,"8":104,"9":104,"10":104,"11":104,"12":104,"13":104,"14":462,"15":44,"16":418,"17":12,"18":406,"19":22,"20":384,"21":5,"22":379,"23":142,"24":142,"25":237,"26":52,"27":52,"28":185,"29":55,"30":55,"31":55,"32":130,"33":28,"34":28,"35":28,"36":102,"37":102,"38":57,"39":57,"40":45,"41":45,"42":45,"43":45,"44":104,"45":83,"46":32,"47":32,"48":32,"49":16,"50":16,"51":16,"52":48,"53":16,"54":51,"55":2,"56":51,"57":26,"58":25,"59":25,"60":25,"61":25,"62":104,"63":1},"b":{"1":[104,102],"2":[53,51],"3":[566,513],"4":[44,418],"5":[12,406],"6":[22,384],"7":[5,379],"8":[142,237],"9":[52,185],"10":[55,130],"11":[28,102],"12":[57,45],"13":[83,21],"14":[104,53],"15":[32,51],"16":[23,9],"17":[16,16],"18":[2,49],"19":[26,25]},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":10,"column":0},"end":{"line":10,"column":24}},"2":{"start":{"line":10,"column":22},"end":{"line":10,"column":23}},"3":{"start":{"line":12,"column":0},"end":{"line":114,"column":2}},"4":{"start":{"line":19,"column":2},"end":{"line":19,"column":34}},"5":{"start":{"line":20,"column":2},"end":{"line":20,"column":64}},"6":{"start":{"line":21,"column":2},"end":{"line":21,"column":40}},"7":{"start":{"line":22,"column":2},"end":{"line":22,"column":43}},"8":{"start":{"line":23,"column":2},"end":{"line":23,"column":41}},"9":{"start":{"line":24,"column":2},"end":{"line":24,"column":48}},"10":{"start":{"line":25,"column":2},"end":{"line":25,"column":41}},"11":{"start":{"line":26,"column":2},"end":{"line":26,"column":39}},"12":{"start":{"line":27,"column":2},"end":{"line":27,"column":45}},"13":{"start":{"line":28,"column":2},"end":{"line":84,"column":3}},"14":{"start":{"line":29,"column":4},"end":{"line":83,"column":5}},"15":{"start":{"line":30,"column":6},"end":{"line":30,"column":54}},"16":{"start":{"line":32,"column":9},"end":{"line":83,"column":5}},"17":{"start":{"line":33,"column":6},"end":{"line":33,"column":50}},"18":{"start":{"line":35,"column":9},"end":{"line":83,"column":5}},"19":{"start":{"line":36,"column":6},"end":{"line":36,"column":51}},"20":{"start":{"line":38,"column":9},"end":{"line":83,"column":5}},"21":{"start":{"line":39,"column":6},"end":{"line":39,"column":47}},"22":{"start":{"line":41,"column":9},"end":{"line":83,"column":5}},"23":{"start":{"line":42,"column":6},"end":{"line":42,"column":54}},"24":{"start":{"line":43,"column":6},"end":{"line":43,"column":51}},"25":{"start":{"line":45,"column":9},"end":{"line":83,"column":5}},"26":{"start":{"line":46,"column":6},"end":{"line":46,"column":50}},"27":{"start":{"line":47,"column":6},"end":{"line":47,"column":47}},"28":{"start":{"line":49,"column":9},"end":{"line":83,"column":5}},"29":{"start":{"line":50,"column":6},"end":{"line":53,"column":8}},"30":{"start":{"line":54,"column":6},"end":{"line":54,"column":54}},"31":{"start":{"line":55,"column":6},"end":{"line":55,"column":47}},"32":{"start":{"line":57,"column":9},"end":{"line":83,"column":5}},"33":{"start":{"line":58,"column":6},"end":{"line":61,"column":8}},"34":{"start":{"line":62,"column":6},"end":{"line":62,"column":50}},"35":{"start":{"line":63,"column":6},"end":{"line":63,"column":51}},"36":{"start":{"line":66,"column":6},"end":{"line":66,"column":56}},"37":{"start":{"line":67,"column":6},"end":{"line":82,"column":7}},"38":{"start":{"line":68,"column":8},"end":{"line":71,"column":10}},"39":{"start":{"line":72,"column":8},"end":{"line":72,"column":53}},"40":{"start":{"line":75,"column":8},"end":{"line":75,"column":37}},"41":{"start":{"line":76,"column":8},"end":{"line":76,"column":35}},"42":{"start":{"line":77,"column":8},"end":{"line":80,"column":10}},"43":{"start":{"line":81,"column":8},"end":{"line":81,"column":53}},"44":{"start":{"line":85,"column":2},"end":{"line":112,"column":3}},"45":{"start":{"line":86,"column":4},"end":{"line":111,"column":5}},"46":{"start":{"line":87,"column":6},"end":{"line":87,"column":45}},"47":{"start":{"line":88,"column":6},"end":{"line":88,"column":55}},"48":{"start":{"line":89,"column":6},"end":{"line":98,"column":7}},"49":{"start":{"line":90,"column":8},"end":{"line":90,"column":73}},"50":{"start":{"line":93,"column":8},"end":{"line":93,"column":75}},"51":{"start":{"line":94,"column":8},"end":{"line":96,"column":9}},"52":{"start":{"line":95,"column":10},"end":{"line":95,"column":67}},"53":{"start":{"line":97,"column":8},"end":{"line":97,"column":49}},"54":{"start":{"line":101,"column":6},"end":{"line":101,"column":61}},"55":{"start":{"line":101,"column":46},"end":{"line":101,"column":61}},"56":{"start":{"line":102,"column":6},"end":{"line":110,"column":7}},"57":{"start":{"line":103,"column":8},"end":{"line":103,"column":68}},"58":{"start":{"line":106,"column":8},"end":{"line":106,"column":61}},"59":{"start":{"line":107,"column":8},"end":{"line":107,"column":66}},"60":{"start":{"line":108,"column":8},"end":{"line":108,"column":61}},"61":{"start":{"line":109,"column":8},"end":{"line":109,"column":31}},"62":{"start":{"line":113,"column":2},"end":{"line":113,"column":21}},"63":{"start":{"line":116,"column":0},"end":{"line":116,"column":78}}},"branchMap":{"1":{"line":19,"type":"binary-expr","locations":[{"start":{"line":19,"column":14},"end":{"line":19,"column":21}},{"start":{"line":19,"column":25},"end":{"line":19,"column":33}}]},"2":{"line":20,"type":"cond-expr","locations":[{"start":{"line":20,"column":38},"end":{"line":20,"column":42}},{"start":{"line":20,"column":45},"end":{"line":20,"column":63}}]},"3":{"line":28,"type":"binary-expr","locations":[{"start":{"line":28,"column":9},"end":{"line":28,"column":35}},{"start":{"line":28,"column":39},"end":{"line":28,"column":63}}]},"4":{"line":29,"type":"if","locations":[{"start":{"line":29,"column":4},"end":{"line":29,"column":4}},{"start":{"line":29,"column":4},"end":{"line":29,"column":4}}]},"5":{"line":32,"type":"if","locations":[{"start":{"line":32,"column":9},"end":{"line":32,"column":9}},{"start":{"line":32,"column":9},"end":{"line":32,"column":9}}]},"6":{"line":35,"type":"if","locations":[{"start":{"line":35,"column":9},"end":{"line":35,"column":9}},{"start":{"line":35,"column":9},"end":{"line":35,"column":9}}]},"7":{"line":38,"type":"if","locations":[{"start":{"line":38,"column":9},"end":{"line":38,"column":9}},{"start":{"line":38,"column":9},"end":{"line":38,"column":9}}]},"8":{"line":41,"type":"if","locations":[{"start":{"line":41,"column":9},"end":{"line":41,"column":9}},{"start":{"line":41,"column":9},"end":{"line":41,"column":9}}]},"9":{"line":45,"type":"if","locations":[{"start":{"line":45,"column":9},"end":{"line":45,"column":9}},{"start":{"line":45,"column":9},"end":{"line":45,"column":9}}]},"10":{"line":49,"type":"if","locations":[{"start":{"line":49,"column":9},"end":{"line":49,"column":9}},{"start":{"line":49,"column":9},"end":{"line":49,"column":9}}]},"11":{"line":57,"type":"if","locations":[{"start":{"line":57,"column":9},"end":{"line":57,"column":9}},{"start":{"line":57,"column":9},"end":{"line":57,"column":9}}]},"12":{"line":67,"type":"if","locations":[{"start":{"line":67,"column":6},"end":{"line":67,"column":6}},{"start":{"line":67,"column":6},"end":{"line":67,"column":6}}]},"13":{"line":85,"type":"if","locations":[{"start":{"line":85,"column":2},"end":{"line":85,"column":2}},{"start":{"line":85,"column":2},"end":{"line":85,"column":2}}]},"14":{"line":85,"type":"binary-expr","locations":[{"start":{"line":85,"column":6},"end":{"line":85,"column":32}},{"start":{"line":85,"column":36},"end":{"line":85,"column":60}}]},"15":{"line":86,"type":"if","locations":[{"start":{"line":86,"column":4},"end":{"line":86,"column":4}},{"start":{"line":86,"column":4},"end":{"line":86,"column":4}}]},"16":{"line":88,"type":"cond-expr","locations":[{"start":{"line":88,"column":34},"end":{"line":88,"column":40}},{"start":{"line":88,"column":43},"end":{"line":88,"column":54}}]},"17":{"line":89,"type":"if","locations":[{"start":{"line":89,"column":6},"end":{"line":89,"column":6}},{"start":{"line":89,"column":6},"end":{"line":89,"column":6}}]},"18":{"line":101,"type":"if","locations":[{"start":{"line":101,"column":6},"end":{"line":101,"column":6}},{"start":{"line":101,"column":6},"end":{"line":101,"column":6}}]},"19":{"line":102,"type":"if","locations":[{"start":{"line":102,"column":6},"end":{"line":102,"column":6}},{"start":{"line":102,"column":6},"end":{"line":102,"column":6}}]}}}} \ No newline at end of file +{"/home/webreflection/code/domdiff/cjs/index.js":{"path":"/home/webreflection/code/domdiff/cjs/index.js","s":{"1":1,"2":517,"3":1,"4":24,"5":24,"6":24,"7":24,"8":1,"9":104,"10":104,"11":104,"12":104,"13":104,"14":104,"15":104,"16":104,"17":104,"18":104,"19":421,"20":38,"21":383,"22":3,"23":380,"24":22,"25":358,"26":5,"27":353,"28":135,"29":135,"30":218,"31":52,"32":52,"33":166,"34":55,"35":55,"36":55,"37":111,"38":21,"39":21,"40":21,"41":90,"42":90,"43":55,"44":55,"45":35,"46":35,"47":35,"48":54,"49":54,"50":35,"51":12,"52":11,"53":1,"54":12,"55":12,"56":12,"57":12,"58":23,"59":23,"60":23,"61":23,"62":104,"63":83,"64":34,"65":34,"66":34,"67":13,"68":21,"69":21,"70":58,"71":21,"72":49,"73":2,"74":49,"75":26,"76":23,"77":104,"78":1},"b":{"1":[104,102],"2":[53,51],"3":[525,470],"4":[38,383],"5":[3,380],"6":[22,358],"7":[5,353],"8":[135,218],"9":[52,166],"10":[55,111],"11":[21,90],"12":[55,35],"13":[89,82,79],"14":[12,23],"15":[11,1],"16":[83,21],"17":[104,55],"18":[34,49],"19":[25,9],"20":[13,21],"21":[2,47],"22":[26,23]},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":10,"column":0},"end":{"line":10,"column":24}},"2":{"start":{"line":10,"column":22},"end":{"line":10,"column":23}},"3":{"start":{"line":12,"column":0},"end":{"line":17,"column":2}},"4":{"start":{"line":13,"column":2},"end":{"line":13,"column":55}},"5":{"start":{"line":14,"column":2},"end":{"line":14,"column":31}},"6":{"start":{"line":15,"column":2},"end":{"line":15,"column":27}},"7":{"start":{"line":16,"column":2},"end":{"line":16,"column":25}},"8":{"start":{"line":19,"column":0},"end":{"line":145,"column":2}},"9":{"start":{"line":26,"column":2},"end":{"line":26,"column":34}},"10":{"start":{"line":27,"column":2},"end":{"line":27,"column":64}},"11":{"start":{"line":28,"column":2},"end":{"line":28,"column":40}},"12":{"start":{"line":29,"column":2},"end":{"line":29,"column":43}},"13":{"start":{"line":30,"column":2},"end":{"line":30,"column":41}},"14":{"start":{"line":31,"column":2},"end":{"line":31,"column":48}},"15":{"start":{"line":32,"column":2},"end":{"line":32,"column":41}},"16":{"start":{"line":33,"column":2},"end":{"line":33,"column":39}},"17":{"start":{"line":34,"column":2},"end":{"line":34,"column":45}},"18":{"start":{"line":35,"column":2},"end":{"line":114,"column":3}},"19":{"start":{"line":36,"column":4},"end":{"line":113,"column":5}},"20":{"start":{"line":37,"column":6},"end":{"line":37,"column":54}},"21":{"start":{"line":39,"column":9},"end":{"line":113,"column":5}},"22":{"start":{"line":40,"column":6},"end":{"line":40,"column":50}},"23":{"start":{"line":42,"column":9},"end":{"line":113,"column":5}},"24":{"start":{"line":43,"column":6},"end":{"line":43,"column":51}},"25":{"start":{"line":45,"column":9},"end":{"line":113,"column":5}},"26":{"start":{"line":46,"column":6},"end":{"line":46,"column":47}},"27":{"start":{"line":48,"column":9},"end":{"line":113,"column":5}},"28":{"start":{"line":49,"column":6},"end":{"line":49,"column":54}},"29":{"start":{"line":50,"column":6},"end":{"line":50,"column":51}},"30":{"start":{"line":52,"column":9},"end":{"line":113,"column":5}},"31":{"start":{"line":53,"column":6},"end":{"line":53,"column":50}},"32":{"start":{"line":54,"column":6},"end":{"line":54,"column":47}},"33":{"start":{"line":56,"column":9},"end":{"line":113,"column":5}},"34":{"start":{"line":57,"column":6},"end":{"line":60,"column":8}},"35":{"start":{"line":61,"column":6},"end":{"line":61,"column":54}},"36":{"start":{"line":62,"column":6},"end":{"line":62,"column":47}},"37":{"start":{"line":64,"column":9},"end":{"line":113,"column":5}},"38":{"start":{"line":65,"column":6},"end":{"line":68,"column":8}},"39":{"start":{"line":69,"column":6},"end":{"line":69,"column":50}},"40":{"start":{"line":70,"column":6},"end":{"line":70,"column":51}},"41":{"start":{"line":73,"column":6},"end":{"line":73,"column":56}},"42":{"start":{"line":74,"column":6},"end":{"line":112,"column":7}},"43":{"start":{"line":75,"column":8},"end":{"line":78,"column":10}},"44":{"start":{"line":79,"column":8},"end":{"line":79,"column":53}},"45":{"start":{"line":82,"column":8},"end":{"line":82,"column":22}},"46":{"start":{"line":83,"column":8},"end":{"line":83,"column":28}},"47":{"start":{"line":84,"column":8},"end":{"line":91,"column":9}},"48":{"start":{"line":89,"column":10},"end":{"line":89,"column":14}},"49":{"start":{"line":90,"column":10},"end":{"line":90,"column":14}},"50":{"start":{"line":92,"column":8},"end":{"line":111,"column":9}},"51":{"start":{"line":93,"column":10},"end":{"line":101,"column":11}},"52":{"start":{"line":94,"column":12},"end":{"line":94,"column":62}},"53":{"start":{"line":96,"column":12},"end":{"line":100,"column":14}},"54":{"start":{"line":102,"column":10},"end":{"line":102,"column":27}},"55":{"start":{"line":103,"column":10},"end":{"line":103,"column":26}},"56":{"start":{"line":104,"column":10},"end":{"line":104,"column":45}},"57":{"start":{"line":105,"column":10},"end":{"line":105,"column":43}},"58":{"start":{"line":107,"column":10},"end":{"line":107,"column":41}},"59":{"start":{"line":108,"column":10},"end":{"line":108,"column":37}},"60":{"start":{"line":109,"column":10},"end":{"line":109,"column":72}},"61":{"start":{"line":110,"column":10},"end":{"line":110,"column":55}},"62":{"start":{"line":115,"column":2},"end":{"line":143,"column":3}},"63":{"start":{"line":116,"column":4},"end":{"line":142,"column":5}},"64":{"start":{"line":117,"column":6},"end":{"line":117,"column":45}},"65":{"start":{"line":118,"column":6},"end":{"line":118,"column":55}},"66":{"start":{"line":119,"column":6},"end":{"line":128,"column":7}},"67":{"start":{"line":120,"column":8},"end":{"line":120,"column":73}},"68":{"start":{"line":123,"column":8},"end":{"line":123,"column":75}},"69":{"start":{"line":124,"column":8},"end":{"line":126,"column":9}},"70":{"start":{"line":125,"column":10},"end":{"line":125,"column":67}},"71":{"start":{"line":127,"column":8},"end":{"line":127,"column":49}},"72":{"start":{"line":131,"column":6},"end":{"line":131,"column":61}},"73":{"start":{"line":131,"column":46},"end":{"line":131,"column":61}},"74":{"start":{"line":132,"column":6},"end":{"line":141,"column":7}},"75":{"start":{"line":133,"column":8},"end":{"line":133,"column":68}},"76":{"start":{"line":136,"column":8},"end":{"line":140,"column":10}},"77":{"start":{"line":144,"column":2},"end":{"line":144,"column":21}},"78":{"start":{"line":147,"column":0},"end":{"line":147,"column":78}}},"branchMap":{"1":{"line":26,"type":"binary-expr","locations":[{"start":{"line":26,"column":14},"end":{"line":26,"column":21}},{"start":{"line":26,"column":25},"end":{"line":26,"column":33}}]},"2":{"line":27,"type":"cond-expr","locations":[{"start":{"line":27,"column":38},"end":{"line":27,"column":42}},{"start":{"line":27,"column":45},"end":{"line":27,"column":63}}]},"3":{"line":35,"type":"binary-expr","locations":[{"start":{"line":35,"column":9},"end":{"line":35,"column":35}},{"start":{"line":35,"column":39},"end":{"line":35,"column":63}}]},"4":{"line":36,"type":"if","locations":[{"start":{"line":36,"column":4},"end":{"line":36,"column":4}},{"start":{"line":36,"column":4},"end":{"line":36,"column":4}}]},"5":{"line":39,"type":"if","locations":[{"start":{"line":39,"column":9},"end":{"line":39,"column":9}},{"start":{"line":39,"column":9},"end":{"line":39,"column":9}}]},"6":{"line":42,"type":"if","locations":[{"start":{"line":42,"column":9},"end":{"line":42,"column":9}},{"start":{"line":42,"column":9},"end":{"line":42,"column":9}}]},"7":{"line":45,"type":"if","locations":[{"start":{"line":45,"column":9},"end":{"line":45,"column":9}},{"start":{"line":45,"column":9},"end":{"line":45,"column":9}}]},"8":{"line":48,"type":"if","locations":[{"start":{"line":48,"column":9},"end":{"line":48,"column":9}},{"start":{"line":48,"column":9},"end":{"line":48,"column":9}}]},"9":{"line":52,"type":"if","locations":[{"start":{"line":52,"column":9},"end":{"line":52,"column":9}},{"start":{"line":52,"column":9},"end":{"line":52,"column":9}}]},"10":{"line":56,"type":"if","locations":[{"start":{"line":56,"column":9},"end":{"line":56,"column":9}},{"start":{"line":56,"column":9},"end":{"line":56,"column":9}}]},"11":{"line":64,"type":"if","locations":[{"start":{"line":64,"column":9},"end":{"line":64,"column":9}},{"start":{"line":64,"column":9},"end":{"line":64,"column":9}}]},"12":{"line":74,"type":"if","locations":[{"start":{"line":74,"column":6},"end":{"line":74,"column":6}},{"start":{"line":74,"column":6},"end":{"line":74,"column":6}}]},"13":{"line":85,"type":"binary-expr","locations":[{"start":{"line":85,"column":10},"end":{"line":85,"column":25}},{"start":{"line":86,"column":10},"end":{"line":86,"column":24}},{"start":{"line":87,"column":10},"end":{"line":87,"column":44}}]},"14":{"line":92,"type":"if","locations":[{"start":{"line":92,"column":8},"end":{"line":92,"column":8}},{"start":{"line":92,"column":8},"end":{"line":92,"column":8}}]},"15":{"line":93,"type":"if","locations":[{"start":{"line":93,"column":10},"end":{"line":93,"column":10}},{"start":{"line":93,"column":10},"end":{"line":93,"column":10}}]},"16":{"line":115,"type":"if","locations":[{"start":{"line":115,"column":2},"end":{"line":115,"column":2}},{"start":{"line":115,"column":2},"end":{"line":115,"column":2}}]},"17":{"line":115,"type":"binary-expr","locations":[{"start":{"line":115,"column":6},"end":{"line":115,"column":32}},{"start":{"line":115,"column":36},"end":{"line":115,"column":60}}]},"18":{"line":116,"type":"if","locations":[{"start":{"line":116,"column":4},"end":{"line":116,"column":4}},{"start":{"line":116,"column":4},"end":{"line":116,"column":4}}]},"19":{"line":118,"type":"cond-expr","locations":[{"start":{"line":118,"column":34},"end":{"line":118,"column":40}},{"start":{"line":118,"column":43},"end":{"line":118,"column":54}}]},"20":{"line":119,"type":"if","locations":[{"start":{"line":119,"column":6},"end":{"line":119,"column":6}},{"start":{"line":119,"column":6},"end":{"line":119,"column":6}}]},"21":{"line":131,"type":"if","locations":[{"start":{"line":131,"column":6},"end":{"line":131,"column":6}},{"start":{"line":131,"column":6},"end":{"line":131,"column":6}}]},"22":{"line":132,"type":"if","locations":[{"start":{"line":132,"column":6},"end":{"line":132,"column":6}},{"start":{"line":132,"column":6},"end":{"line":132,"column":6}}]}}}} \ No newline at end of file diff --git a/coverage/lcov-report/cjs/index.html b/coverage/lcov-report/cjs/index.html index df61d5f..c03d675 100644 --- a/coverage/lcov-report/cjs/index.html +++ b/coverage/lcov-report/cjs/index.html @@ -22,12 +22,12 @@

100% Statements - 63/63 + 78/78
100% Branches - 38/38 + 45/45
100% @@ -37,7 +37,7 @@

100% Lines - 61/61 + 76/76

@@ -62,13 +62,13 @@

index.js
100% - 63/63 + 78/78 100% - 38/38 + 45/45 100% 0/0 100% - 61/61 + 76/76 @@ -77,7 +77,7 @@

diff --git a/coverage/lcov-report/cjs/index.js.html b/coverage/lcov-report/cjs/index.js.html index 441dc92..19a5317 100644 --- a/coverage/lcov-report/cjs/index.js.html +++ b/coverage/lcov-report/cjs/index.js.html @@ -22,12 +22,12 @@

100% Statements - 63/63 + 78/78
100% Branches - 38/38 + 45/45
100% @@ -37,7 +37,7 @@

100% Lines - 61/61 + 76/76

@@ -159,16 +159,54 @@

114 115 116 -117  -  -  -  -  -  -  +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148  +  +  +  +  +  +  +  +  +517×   + +24× +24× +24× +24×   -559×     @@ -187,27 +225,27 @@

104× 104× 104× -462× -44× +421× +38×   -418× -12× +383× +   -406× +380× 22×   -384× +358×   -379× -142× -142× +353× +135× +135×   -237× +218× 52× 52×   -185× +166× 55×     @@ -215,59 +253,83 @@

55× 55×   -130× -28× +111× +21× +  +    +21× +21×     -28× -28× +90× +90× +55× +  +  +  +55×     -102× -102× -57× +35× +35× +35×       -57×   +54× +54×   -45× -45× -45× +35× +12× +11×   +     -45× +  +  +  +12× +12× +12× +12× +  +23× +23× +23× +23× +        104× 83× -32× -32× -32× -16× +34× +34× +34× +13×     -16× -16× -48× +21× +21× +58×   -16× +21×       -51× -51× +49× +49× 26×     -25× -25× -25× -25× +23× +  +  +  +        @@ -286,6 +348,13 @@

  const identity = O => O;   +const remove = (parentNode, before, after) => { + const range = parentNode.ownerDocument.createRange(); + range.setStartBefore(before); + range.setEndAfter(after); + range.deleteContents(); +}; +  const domdiff = ( parentNode, // where changes happen currentNodes, // Array of current items/nodes @@ -349,13 +418,36 @@

futureStartNode = futureNodes[++futureStart]; } else { - let el = currentNodes[index]; - currentNodes[index] = null; - parentNode.insertBefore( - get(el, 1), - get(currentStartNode, 0) - ); - futureStartNode = futureNodes[++futureStart]; + let i = index; + let f = futureStart; + while ( + i <= currentEnd && + f <= futureEnd && + currentNodes[i] === futureNodes[f] + ) { + i++; + f++; + } + if (1 < (i - index)) { + if (--index === currentStart) { + parentNode.removeChild(get(currentStartNode, -1)); + } else { + remove( + parentNode, + get(currentStartNode, -1), + get(currentNodes[index], -1) + ); + } + currentStart = i; + futureStart = f; + currentStartNode = currentNodes[i]; + futureStartNode = futureNodes[f]; + } else { + const el = currentNodes[index]; + currentNodes[index] = null; + parentNode.insertBefore(get(el, 1), get(currentStartNode, 0)); + futureStartNode = futureNodes[++futureStart]; + } } } } @@ -380,10 +472,11 @@

parentNode.removeChild(get(currentNodes[currentStart], -1)); } else { - const range = parentNode.ownerDocument.createRange(); - range.setStartBefore(get(currentNodes[currentStart], -1)); - range.setEndAfter(get(currentNodes[currentEnd], -1)); - range.deleteContents(); + remove( + parentNode, + get(currentNodes[currentStart], -1), + get(currentNodes[currentEnd], -1) + ); } } } @@ -397,7 +490,7 @@

diff --git a/coverage/lcov-report/index.html b/coverage/lcov-report/index.html index 562cfee..b59c640 100644 --- a/coverage/lcov-report/index.html +++ b/coverage/lcov-report/index.html @@ -22,12 +22,12 @@

100% Statements - 63/63 + 78/78
100% Branches - 38/38 + 45/45
100% @@ -37,7 +37,7 @@

100% Lines - 61/61 + 76/76

@@ -62,13 +62,13 @@

cjs/
100% - 63/63 + 78/78 100% - 38/38 + 45/45 100% 0/0 100% - 61/61 + 76/76 @@ -77,7 +77,7 @@

diff --git a/coverage/lcov.info b/coverage/lcov.info index 436880a..78e3e49 100644 --- a/coverage/lcov.info +++ b/coverage/lcov.info @@ -2,107 +2,129 @@ TN: SF:/home/webreflection/code/domdiff/cjs/index.js FNF:0 FNH:0 -DA:10,559 +DA:10,517 DA:12,1 -DA:19,104 -DA:20,104 -DA:21,104 -DA:22,104 -DA:23,104 -DA:24,104 -DA:25,104 +DA:13,24 +DA:14,24 +DA:15,24 +DA:16,24 +DA:19,1 DA:26,104 DA:27,104 DA:28,104 -DA:29,462 -DA:30,44 -DA:32,418 -DA:33,12 -DA:35,406 -DA:36,22 -DA:38,384 -DA:39,5 -DA:41,379 -DA:42,142 -DA:43,142 -DA:45,237 -DA:46,52 -DA:47,52 -DA:49,185 -DA:50,55 -DA:54,55 -DA:55,55 -DA:57,130 -DA:58,28 -DA:62,28 -DA:63,28 -DA:66,102 -DA:67,102 -DA:68,57 -DA:72,57 -DA:75,45 -DA:76,45 -DA:77,45 -DA:81,45 -DA:85,104 -DA:86,83 -DA:87,32 -DA:88,32 -DA:89,32 -DA:90,16 -DA:93,16 -DA:94,16 -DA:95,48 -DA:97,16 -DA:101,51 -DA:102,51 -DA:103,26 -DA:106,25 -DA:107,25 -DA:108,25 -DA:109,25 -DA:113,104 -DA:116,1 -LF:61 -LH:61 -BRDA:19,1,0,104 -BRDA:19,1,1,102 -BRDA:20,2,0,53 -BRDA:20,2,1,51 -BRDA:28,3,0,566 -BRDA:28,3,1,513 -BRDA:29,4,0,44 -BRDA:29,4,1,418 -BRDA:32,5,0,12 -BRDA:32,5,1,406 -BRDA:35,6,0,22 -BRDA:35,6,1,384 -BRDA:38,7,0,5 -BRDA:38,7,1,379 -BRDA:41,8,0,142 -BRDA:41,8,1,237 -BRDA:45,9,0,52 -BRDA:45,9,1,185 -BRDA:49,10,0,55 -BRDA:49,10,1,130 -BRDA:57,11,0,28 -BRDA:57,11,1,102 -BRDA:67,12,0,57 -BRDA:67,12,1,45 -BRDA:85,13,0,83 -BRDA:85,13,1,21 -BRDA:85,14,0,104 -BRDA:85,14,1,53 -BRDA:86,15,0,32 -BRDA:86,15,1,51 -BRDA:88,16,0,23 -BRDA:88,16,1,9 -BRDA:89,17,0,16 -BRDA:89,17,1,16 -BRDA:101,18,0,2 -BRDA:101,18,1,49 -BRDA:102,19,0,26 -BRDA:102,19,1,25 -BRF:38 -BRH:38 +DA:29,104 +DA:30,104 +DA:31,104 +DA:32,104 +DA:33,104 +DA:34,104 +DA:35,104 +DA:36,421 +DA:37,38 +DA:39,383 +DA:40,3 +DA:42,380 +DA:43,22 +DA:45,358 +DA:46,5 +DA:48,353 +DA:49,135 +DA:50,135 +DA:52,218 +DA:53,52 +DA:54,52 +DA:56,166 +DA:57,55 +DA:61,55 +DA:62,55 +DA:64,111 +DA:65,21 +DA:69,21 +DA:70,21 +DA:73,90 +DA:74,90 +DA:75,55 +DA:79,55 +DA:82,35 +DA:83,35 +DA:84,35 +DA:89,54 +DA:90,54 +DA:92,35 +DA:93,12 +DA:94,11 +DA:96,1 +DA:102,12 +DA:103,12 +DA:104,12 +DA:105,12 +DA:107,23 +DA:108,23 +DA:109,23 +DA:110,23 +DA:115,104 +DA:116,83 +DA:117,34 +DA:118,34 +DA:119,34 +DA:120,13 +DA:123,21 +DA:124,21 +DA:125,58 +DA:127,21 +DA:131,49 +DA:132,49 +DA:133,26 +DA:136,23 +DA:144,104 +DA:147,1 +LF:76 +LH:76 +BRDA:26,1,0,104 +BRDA:26,1,1,102 +BRDA:27,2,0,53 +BRDA:27,2,1,51 +BRDA:35,3,0,525 +BRDA:35,3,1,470 +BRDA:36,4,0,38 +BRDA:36,4,1,383 +BRDA:39,5,0,3 +BRDA:39,5,1,380 +BRDA:42,6,0,22 +BRDA:42,6,1,358 +BRDA:45,7,0,5 +BRDA:45,7,1,353 +BRDA:48,8,0,135 +BRDA:48,8,1,218 +BRDA:52,9,0,52 +BRDA:52,9,1,166 +BRDA:56,10,0,55 +BRDA:56,10,1,111 +BRDA:64,11,0,21 +BRDA:64,11,1,90 +BRDA:74,12,0,55 +BRDA:74,12,1,35 +BRDA:85,13,0,89 +BRDA:85,13,1,82 +BRDA:85,13,2,79 +BRDA:92,14,0,12 +BRDA:92,14,1,23 +BRDA:93,15,0,11 +BRDA:93,15,1,1 +BRDA:115,16,0,83 +BRDA:115,16,1,21 +BRDA:115,17,0,104 +BRDA:115,17,1,55 +BRDA:116,18,0,34 +BRDA:116,18,1,49 +BRDA:118,19,0,25 +BRDA:118,19,1,9 +BRDA:119,20,0,13 +BRDA:119,20,1,21 +BRDA:131,21,0,2 +BRDA:131,21,1,47 +BRDA:132,22,0,26 +BRDA:132,22,1,23 +BRF:45 +BRH:45 end_of_record diff --git a/esm/index.js b/esm/index.js index daa72c4..9e5c0b7 100644 --- a/esm/index.js +++ b/esm/index.js @@ -8,6 +8,13 @@ const identity = O => O; +const remove = (parentNode, before, after) => { + const range = parentNode.ownerDocument.createRange(); + range.setStartBefore(before); + range.setEndAfter(after); + range.deleteContents(); +}; + const domdiff = ( parentNode, // where changes happen currentNodes, // Array of current items/nodes @@ -71,13 +78,36 @@ const domdiff = ( futureStartNode = futureNodes[++futureStart]; } else { - let el = currentNodes[index]; - currentNodes[index] = null; - parentNode.insertBefore( - get(el, 1), - get(currentStartNode, 0) - ); - futureStartNode = futureNodes[++futureStart]; + let i = index; + let f = futureStart; + while ( + i <= currentEnd && + f <= futureEnd && + currentNodes[i] === futureNodes[f] + ) { + i++; + f++; + } + if (1 < (i - index)) { + if (--index === currentStart) { + parentNode.removeChild(get(currentStartNode, -1)); + } else { + remove( + parentNode, + get(currentStartNode, -1), + get(currentNodes[index], -1) + ); + } + currentStart = i; + futureStart = f; + currentStartNode = currentNodes[i]; + futureStartNode = futureNodes[f]; + } else { + const el = currentNodes[index]; + currentNodes[index] = null; + parentNode.insertBefore(get(el, 1), get(currentStartNode, 0)); + futureStartNode = futureNodes[++futureStart]; + } } } } @@ -102,10 +132,11 @@ const domdiff = ( parentNode.removeChild(get(currentNodes[currentStart], -1)); } else { - const range = parentNode.ownerDocument.createRange(); - range.setStartBefore(get(currentNodes[currentStart], -1)); - range.setEndAfter(get(currentNodes[currentEnd], -1)); - range.deleteContents(); + remove( + parentNode, + get(currentNodes[currentStart], -1), + get(currentNodes[currentEnd], -1) + ); } } } diff --git a/index.js b/index.js index df247ef..f7121e9 100644 --- a/index.js +++ b/index.js @@ -13,6 +13,13 @@ var identity = function identity(O) { return O; }; +var remove = function remove(parentNode, before, after) { + var range = parentNode.ownerDocument.createRange(); + range.setStartBefore(before); + range.setEndAfter(after); + range.deleteContents(); +}; + var domdiff = function domdiff(parentNode, // where changes happen currentNodes, // Array of current items/nodes futureNodes, // Array of future items/nodes @@ -58,10 +65,28 @@ beforeNode // optional item/node to use as insertBefore delimiter parentNode.insertBefore(get(futureStartNode, 1), get(currentStartNode, 0)); futureStartNode = futureNodes[++futureStart]; } else { - var el = currentNodes[index]; - currentNodes[index] = null; - parentNode.insertBefore(get(el, 1), get(currentStartNode, 0)); - futureStartNode = futureNodes[++futureStart]; + var i = index; + var f = futureStart; + while (i <= currentEnd && f <= futureEnd && currentNodes[i] === futureNodes[f]) { + i++; + f++; + } + if (1 < i - index) { + if (--index === currentStart) { + parentNode.removeChild(get(currentStartNode, -1)); + } else { + remove(parentNode, get(currentStartNode, -1), get(currentNodes[index], -1)); + } + currentStart = i; + futureStart = f; + currentStartNode = currentNodes[i]; + futureStartNode = futureNodes[f]; + } else { + var el = currentNodes[index]; + currentNodes[index] = null; + parentNode.insertBefore(get(el, 1), get(currentStartNode, 0)); + futureStartNode = futureNodes[++futureStart]; + } } } } @@ -83,10 +108,7 @@ beforeNode // optional item/node to use as insertBefore delimiter if (currentStart === currentEnd) { parentNode.removeChild(get(currentNodes[currentStart], -1)); } else { - var range = parentNode.ownerDocument.createRange(); - range.setStartBefore(get(currentNodes[currentStart], -1)); - range.setEndAfter(get(currentNodes[currentEnd], -1)); - range.deleteContents(); + remove(parentNode, get(currentNodes[currentStart], -1), get(currentNodes[currentEnd], -1)); } } } diff --git a/min.js b/min.js index 383d5ff..fd8234b 100644 --- a/min.js +++ b/min.js @@ -1,2 +1,2 @@ var domdiff=function(){"use strict";/*! (c) 2017 Andrea Giammarchi (ISC) */ -var e=function(e){return e};return function(n,r,l,t,f){for(var i=t||e,s=null==f?null:i(f,0),o=0,u=0,a=r.length-1,c=r[0],v=r[a],d=l.length-1,B=l[0],m=l[d];o<=a&&u<=d;)if(null==c)c=r[++o];else if(null==v)v=r[--a];else if(null==B)B=l[++u];else if(null==m)m=l[--d];else if(c==B)c=r[++o],B=l[++u];else if(v==m)v=r[--a],m=l[--d];else if(c==m)n.insertBefore(i(c,1),i(v,-0).nextSibling),c=r[++o],m=l[--d];else if(v==B)n.insertBefore(i(v,1),i(c,0)),v=r[--a],B=l[++u];else{var g=r.indexOf(B);if(g<0)n.insertBefore(i(B,1),i(c,0)),B=l[++u];else{var h=r[g];r[g]=null,n.insertBefore(i(h,1),i(c,0)),B=l[++u]}}if(o<=a||u<=d)if(o>a){var C=l[d+1],D=null==C?s:i(C,0);if(u===d)n.insertBefore(i(l[u],1),D);else{for(var p=n.ownerDocument.createDocumentFragment();u<=d;)p.appendChild(i(l[u++],1));n.insertBefore(p,D)}}else if(null==r[o]&&o++,o===a)n.removeChild(i(r[o],-1));else{var w=n.ownerDocument.createRange();w.setStartBefore(i(r[o],-1)),w.setEndAfter(i(r[a],-1)),w.deleteContents()}return l}}(); \ No newline at end of file +var e=function(e){return e},n=function(e,n,r){var l=e.ownerDocument.createRange();l.setStartBefore(n),l.setEndAfter(r),l.deleteContents()};return function(r,l,t,f,i){for(var o=f||e,s=null==i?null:o(i,0),u=0,a=0,v=l.length-1,c=l[0],d=l[v],m=t.length-1,B=t[0],g=t[m];u<=v&&a<=m;)if(null==c)c=l[++u];else if(null==d)d=l[--v];else if(null==B)B=t[++a];else if(null==g)g=t[--m];else if(c==B)c=l[++u],B=t[++a];else if(d==g)d=l[--v],g=t[--m];else if(c==g)r.insertBefore(o(c,1),o(d,-0).nextSibling),c=l[++u],g=t[--m];else if(d==B)r.insertBefore(o(d,1),o(c,0)),d=l[--v],B=t[++a];else{var h=l.indexOf(B);if(h<0)r.insertBefore(o(B,1),o(c,0)),B=t[++a];else{for(var C=h,D=a;C<=v&&D<=m&&l[C]===t[D];)C++,D++;if(1v){var w=t[m+1],x=null==w?s:o(w,0);if(a===m)r.insertBefore(o(t[a],1),x);else{for(var S=r.ownerDocument.createDocumentFragment();a<=m;)S.appendChild(o(t[a++],1));r.insertBefore(S,x)}}else null==l[u]&&u++,u===v?r.removeChild(o(l[u],-1)):n(r,o(l[u],-1),o(l[v],-1));return t}}(); \ No newline at end of file From 31da6fd8f8db68bd6369578a4077c9c8768f736e Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Sat, 7 Apr 2018 18:31:56 +0200 Subject: [PATCH 27/71] 0.4.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 34b6f67..e130705 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "domdiff", - "version": "0.3.6", + "version": "0.4.0", "description": "A fast and simple way to diff childNodes", "browser": "min.js", "main": "cjs/index.js", From a28f463510ac6043a51232a90ee806fade75bc99 Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Mon, 18 Jun 2018 11:29:08 +0200 Subject: [PATCH 28/71] fix #6 - do not break on some funny sort case --- cjs/index.js | 15 +- coverage/coverage.json | 2 +- coverage/lcov-report/cjs/index.html | 14 +- coverage/lcov-report/cjs/index.js.html | 135 ++++++++------ coverage/lcov-report/index.html | 14 +- coverage/lcov.info | 247 +++++++++++++------------ esm/index.js | 15 +- index.js | 12 +- min.js | 2 +- test/test.js | 36 ++++ 10 files changed, 281 insertions(+), 211 deletions(-) diff --git a/cjs/index.js b/cjs/index.js index 5ed255d..208e6f4 100644 --- a/cjs/index.js +++ b/cjs/index.js @@ -10,10 +10,14 @@ const identity = O => O; const remove = (parentNode, before, after) => { - const range = parentNode.ownerDocument.createRange(); - range.setStartBefore(before); - range.setEndAfter(after); - range.deleteContents(); + if (after == null) { + parentNode.removeChild(before); + } else { + const range = parentNode.ownerDocument.createRange(); + range.setStartBefore(before); + range.setEndAfter(after); + range.deleteContents(); + } }; const domdiff = ( @@ -128,7 +132,8 @@ const domdiff = ( } } else { - if (currentNodes[currentStart] == null) currentStart++; + if (currentNodes[currentStart] == null) + currentStart++; if (currentStart === currentEnd) { parentNode.removeChild(get(currentNodes[currentStart], -1)); } diff --git a/coverage/coverage.json b/coverage/coverage.json index 4f35bed..267a1da 100644 --- a/coverage/coverage.json +++ b/coverage/coverage.json @@ -1 +1 @@ -{"/home/webreflection/code/domdiff/cjs/index.js":{"path":"/home/webreflection/code/domdiff/cjs/index.js","s":{"1":1,"2":517,"3":1,"4":24,"5":24,"6":24,"7":24,"8":1,"9":104,"10":104,"11":104,"12":104,"13":104,"14":104,"15":104,"16":104,"17":104,"18":104,"19":421,"20":38,"21":383,"22":3,"23":380,"24":22,"25":358,"26":5,"27":353,"28":135,"29":135,"30":218,"31":52,"32":52,"33":166,"34":55,"35":55,"36":55,"37":111,"38":21,"39":21,"40":21,"41":90,"42":90,"43":55,"44":55,"45":35,"46":35,"47":35,"48":54,"49":54,"50":35,"51":12,"52":11,"53":1,"54":12,"55":12,"56":12,"57":12,"58":23,"59":23,"60":23,"61":23,"62":104,"63":83,"64":34,"65":34,"66":34,"67":13,"68":21,"69":21,"70":58,"71":21,"72":49,"73":2,"74":49,"75":26,"76":23,"77":104,"78":1},"b":{"1":[104,102],"2":[53,51],"3":[525,470],"4":[38,383],"5":[3,380],"6":[22,358],"7":[5,353],"8":[135,218],"9":[52,166],"10":[55,111],"11":[21,90],"12":[55,35],"13":[89,82,79],"14":[12,23],"15":[11,1],"16":[83,21],"17":[104,55],"18":[34,49],"19":[25,9],"20":[13,21],"21":[2,47],"22":[26,23]},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":10,"column":0},"end":{"line":10,"column":24}},"2":{"start":{"line":10,"column":22},"end":{"line":10,"column":23}},"3":{"start":{"line":12,"column":0},"end":{"line":17,"column":2}},"4":{"start":{"line":13,"column":2},"end":{"line":13,"column":55}},"5":{"start":{"line":14,"column":2},"end":{"line":14,"column":31}},"6":{"start":{"line":15,"column":2},"end":{"line":15,"column":27}},"7":{"start":{"line":16,"column":2},"end":{"line":16,"column":25}},"8":{"start":{"line":19,"column":0},"end":{"line":145,"column":2}},"9":{"start":{"line":26,"column":2},"end":{"line":26,"column":34}},"10":{"start":{"line":27,"column":2},"end":{"line":27,"column":64}},"11":{"start":{"line":28,"column":2},"end":{"line":28,"column":40}},"12":{"start":{"line":29,"column":2},"end":{"line":29,"column":43}},"13":{"start":{"line":30,"column":2},"end":{"line":30,"column":41}},"14":{"start":{"line":31,"column":2},"end":{"line":31,"column":48}},"15":{"start":{"line":32,"column":2},"end":{"line":32,"column":41}},"16":{"start":{"line":33,"column":2},"end":{"line":33,"column":39}},"17":{"start":{"line":34,"column":2},"end":{"line":34,"column":45}},"18":{"start":{"line":35,"column":2},"end":{"line":114,"column":3}},"19":{"start":{"line":36,"column":4},"end":{"line":113,"column":5}},"20":{"start":{"line":37,"column":6},"end":{"line":37,"column":54}},"21":{"start":{"line":39,"column":9},"end":{"line":113,"column":5}},"22":{"start":{"line":40,"column":6},"end":{"line":40,"column":50}},"23":{"start":{"line":42,"column":9},"end":{"line":113,"column":5}},"24":{"start":{"line":43,"column":6},"end":{"line":43,"column":51}},"25":{"start":{"line":45,"column":9},"end":{"line":113,"column":5}},"26":{"start":{"line":46,"column":6},"end":{"line":46,"column":47}},"27":{"start":{"line":48,"column":9},"end":{"line":113,"column":5}},"28":{"start":{"line":49,"column":6},"end":{"line":49,"column":54}},"29":{"start":{"line":50,"column":6},"end":{"line":50,"column":51}},"30":{"start":{"line":52,"column":9},"end":{"line":113,"column":5}},"31":{"start":{"line":53,"column":6},"end":{"line":53,"column":50}},"32":{"start":{"line":54,"column":6},"end":{"line":54,"column":47}},"33":{"start":{"line":56,"column":9},"end":{"line":113,"column":5}},"34":{"start":{"line":57,"column":6},"end":{"line":60,"column":8}},"35":{"start":{"line":61,"column":6},"end":{"line":61,"column":54}},"36":{"start":{"line":62,"column":6},"end":{"line":62,"column":47}},"37":{"start":{"line":64,"column":9},"end":{"line":113,"column":5}},"38":{"start":{"line":65,"column":6},"end":{"line":68,"column":8}},"39":{"start":{"line":69,"column":6},"end":{"line":69,"column":50}},"40":{"start":{"line":70,"column":6},"end":{"line":70,"column":51}},"41":{"start":{"line":73,"column":6},"end":{"line":73,"column":56}},"42":{"start":{"line":74,"column":6},"end":{"line":112,"column":7}},"43":{"start":{"line":75,"column":8},"end":{"line":78,"column":10}},"44":{"start":{"line":79,"column":8},"end":{"line":79,"column":53}},"45":{"start":{"line":82,"column":8},"end":{"line":82,"column":22}},"46":{"start":{"line":83,"column":8},"end":{"line":83,"column":28}},"47":{"start":{"line":84,"column":8},"end":{"line":91,"column":9}},"48":{"start":{"line":89,"column":10},"end":{"line":89,"column":14}},"49":{"start":{"line":90,"column":10},"end":{"line":90,"column":14}},"50":{"start":{"line":92,"column":8},"end":{"line":111,"column":9}},"51":{"start":{"line":93,"column":10},"end":{"line":101,"column":11}},"52":{"start":{"line":94,"column":12},"end":{"line":94,"column":62}},"53":{"start":{"line":96,"column":12},"end":{"line":100,"column":14}},"54":{"start":{"line":102,"column":10},"end":{"line":102,"column":27}},"55":{"start":{"line":103,"column":10},"end":{"line":103,"column":26}},"56":{"start":{"line":104,"column":10},"end":{"line":104,"column":45}},"57":{"start":{"line":105,"column":10},"end":{"line":105,"column":43}},"58":{"start":{"line":107,"column":10},"end":{"line":107,"column":41}},"59":{"start":{"line":108,"column":10},"end":{"line":108,"column":37}},"60":{"start":{"line":109,"column":10},"end":{"line":109,"column":72}},"61":{"start":{"line":110,"column":10},"end":{"line":110,"column":55}},"62":{"start":{"line":115,"column":2},"end":{"line":143,"column":3}},"63":{"start":{"line":116,"column":4},"end":{"line":142,"column":5}},"64":{"start":{"line":117,"column":6},"end":{"line":117,"column":45}},"65":{"start":{"line":118,"column":6},"end":{"line":118,"column":55}},"66":{"start":{"line":119,"column":6},"end":{"line":128,"column":7}},"67":{"start":{"line":120,"column":8},"end":{"line":120,"column":73}},"68":{"start":{"line":123,"column":8},"end":{"line":123,"column":75}},"69":{"start":{"line":124,"column":8},"end":{"line":126,"column":9}},"70":{"start":{"line":125,"column":10},"end":{"line":125,"column":67}},"71":{"start":{"line":127,"column":8},"end":{"line":127,"column":49}},"72":{"start":{"line":131,"column":6},"end":{"line":131,"column":61}},"73":{"start":{"line":131,"column":46},"end":{"line":131,"column":61}},"74":{"start":{"line":132,"column":6},"end":{"line":141,"column":7}},"75":{"start":{"line":133,"column":8},"end":{"line":133,"column":68}},"76":{"start":{"line":136,"column":8},"end":{"line":140,"column":10}},"77":{"start":{"line":144,"column":2},"end":{"line":144,"column":21}},"78":{"start":{"line":147,"column":0},"end":{"line":147,"column":78}}},"branchMap":{"1":{"line":26,"type":"binary-expr","locations":[{"start":{"line":26,"column":14},"end":{"line":26,"column":21}},{"start":{"line":26,"column":25},"end":{"line":26,"column":33}}]},"2":{"line":27,"type":"cond-expr","locations":[{"start":{"line":27,"column":38},"end":{"line":27,"column":42}},{"start":{"line":27,"column":45},"end":{"line":27,"column":63}}]},"3":{"line":35,"type":"binary-expr","locations":[{"start":{"line":35,"column":9},"end":{"line":35,"column":35}},{"start":{"line":35,"column":39},"end":{"line":35,"column":63}}]},"4":{"line":36,"type":"if","locations":[{"start":{"line":36,"column":4},"end":{"line":36,"column":4}},{"start":{"line":36,"column":4},"end":{"line":36,"column":4}}]},"5":{"line":39,"type":"if","locations":[{"start":{"line":39,"column":9},"end":{"line":39,"column":9}},{"start":{"line":39,"column":9},"end":{"line":39,"column":9}}]},"6":{"line":42,"type":"if","locations":[{"start":{"line":42,"column":9},"end":{"line":42,"column":9}},{"start":{"line":42,"column":9},"end":{"line":42,"column":9}}]},"7":{"line":45,"type":"if","locations":[{"start":{"line":45,"column":9},"end":{"line":45,"column":9}},{"start":{"line":45,"column":9},"end":{"line":45,"column":9}}]},"8":{"line":48,"type":"if","locations":[{"start":{"line":48,"column":9},"end":{"line":48,"column":9}},{"start":{"line":48,"column":9},"end":{"line":48,"column":9}}]},"9":{"line":52,"type":"if","locations":[{"start":{"line":52,"column":9},"end":{"line":52,"column":9}},{"start":{"line":52,"column":9},"end":{"line":52,"column":9}}]},"10":{"line":56,"type":"if","locations":[{"start":{"line":56,"column":9},"end":{"line":56,"column":9}},{"start":{"line":56,"column":9},"end":{"line":56,"column":9}}]},"11":{"line":64,"type":"if","locations":[{"start":{"line":64,"column":9},"end":{"line":64,"column":9}},{"start":{"line":64,"column":9},"end":{"line":64,"column":9}}]},"12":{"line":74,"type":"if","locations":[{"start":{"line":74,"column":6},"end":{"line":74,"column":6}},{"start":{"line":74,"column":6},"end":{"line":74,"column":6}}]},"13":{"line":85,"type":"binary-expr","locations":[{"start":{"line":85,"column":10},"end":{"line":85,"column":25}},{"start":{"line":86,"column":10},"end":{"line":86,"column":24}},{"start":{"line":87,"column":10},"end":{"line":87,"column":44}}]},"14":{"line":92,"type":"if","locations":[{"start":{"line":92,"column":8},"end":{"line":92,"column":8}},{"start":{"line":92,"column":8},"end":{"line":92,"column":8}}]},"15":{"line":93,"type":"if","locations":[{"start":{"line":93,"column":10},"end":{"line":93,"column":10}},{"start":{"line":93,"column":10},"end":{"line":93,"column":10}}]},"16":{"line":115,"type":"if","locations":[{"start":{"line":115,"column":2},"end":{"line":115,"column":2}},{"start":{"line":115,"column":2},"end":{"line":115,"column":2}}]},"17":{"line":115,"type":"binary-expr","locations":[{"start":{"line":115,"column":6},"end":{"line":115,"column":32}},{"start":{"line":115,"column":36},"end":{"line":115,"column":60}}]},"18":{"line":116,"type":"if","locations":[{"start":{"line":116,"column":4},"end":{"line":116,"column":4}},{"start":{"line":116,"column":4},"end":{"line":116,"column":4}}]},"19":{"line":118,"type":"cond-expr","locations":[{"start":{"line":118,"column":34},"end":{"line":118,"column":40}},{"start":{"line":118,"column":43},"end":{"line":118,"column":54}}]},"20":{"line":119,"type":"if","locations":[{"start":{"line":119,"column":6},"end":{"line":119,"column":6}},{"start":{"line":119,"column":6},"end":{"line":119,"column":6}}]},"21":{"line":131,"type":"if","locations":[{"start":{"line":131,"column":6},"end":{"line":131,"column":6}},{"start":{"line":131,"column":6},"end":{"line":131,"column":6}}]},"22":{"line":132,"type":"if","locations":[{"start":{"line":132,"column":6},"end":{"line":132,"column":6}},{"start":{"line":132,"column":6},"end":{"line":132,"column":6}}]}}}} \ No newline at end of file +{"/Users/agiammarchi/git/domdiff/cjs/index.js":{"path":"/Users/agiammarchi/git/domdiff/cjs/index.js","s":{"1":1,"2":532,"3":1,"4":25,"5":1,"6":24,"7":24,"8":24,"9":24,"10":1,"11":107,"12":107,"13":107,"14":107,"15":107,"16":107,"17":107,"18":107,"19":107,"20":107,"21":424,"22":38,"23":386,"24":3,"25":383,"26":22,"27":361,"28":5,"29":356,"30":135,"31":135,"32":221,"33":52,"34":52,"35":169,"36":55,"37":55,"38":55,"39":114,"40":21,"41":21,"42":21,"43":93,"44":93,"45":55,"46":55,"47":38,"48":38,"49":38,"50":58,"51":58,"52":38,"53":13,"54":11,"55":2,"56":13,"57":13,"58":13,"59":13,"60":25,"61":25,"62":25,"63":25,"64":107,"65":86,"66":36,"67":36,"68":36,"69":13,"70":23,"71":23,"72":66,"73":23,"74":50,"75":2,"76":50,"77":27,"78":23,"79":107,"80":1},"b":{"1":[1,24],"2":[107,105],"3":[56,51],"4":[531,474],"5":[38,386],"6":[3,383],"7":[22,361],"8":[5,356],"9":[135,221],"10":[52,169],"11":[55,114],"12":[21,93],"13":[55,38],"14":[96,88,85],"15":[13,25],"16":[11,2],"17":[86,21],"18":[107,57],"19":[36,50],"20":[27,9],"21":[13,23],"22":[2,48],"23":[27,23]},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":10,"column":0},"end":{"line":10,"column":24}},"2":{"start":{"line":10,"column":22},"end":{"line":10,"column":23}},"3":{"start":{"line":12,"column":0},"end":{"line":21,"column":2}},"4":{"start":{"line":13,"column":2},"end":{"line":20,"column":3}},"5":{"start":{"line":14,"column":4},"end":{"line":14,"column":35}},"6":{"start":{"line":16,"column":4},"end":{"line":16,"column":57}},"7":{"start":{"line":17,"column":4},"end":{"line":17,"column":33}},"8":{"start":{"line":18,"column":4},"end":{"line":18,"column":29}},"9":{"start":{"line":19,"column":4},"end":{"line":19,"column":27}},"10":{"start":{"line":23,"column":0},"end":{"line":150,"column":2}},"11":{"start":{"line":30,"column":2},"end":{"line":30,"column":34}},"12":{"start":{"line":31,"column":2},"end":{"line":31,"column":64}},"13":{"start":{"line":32,"column":2},"end":{"line":32,"column":40}},"14":{"start":{"line":33,"column":2},"end":{"line":33,"column":43}},"15":{"start":{"line":34,"column":2},"end":{"line":34,"column":41}},"16":{"start":{"line":35,"column":2},"end":{"line":35,"column":48}},"17":{"start":{"line":36,"column":2},"end":{"line":36,"column":41}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":39}},"19":{"start":{"line":38,"column":2},"end":{"line":38,"column":45}},"20":{"start":{"line":39,"column":2},"end":{"line":118,"column":3}},"21":{"start":{"line":40,"column":4},"end":{"line":117,"column":5}},"22":{"start":{"line":41,"column":6},"end":{"line":41,"column":54}},"23":{"start":{"line":43,"column":9},"end":{"line":117,"column":5}},"24":{"start":{"line":44,"column":6},"end":{"line":44,"column":50}},"25":{"start":{"line":46,"column":9},"end":{"line":117,"column":5}},"26":{"start":{"line":47,"column":6},"end":{"line":47,"column":51}},"27":{"start":{"line":49,"column":9},"end":{"line":117,"column":5}},"28":{"start":{"line":50,"column":6},"end":{"line":50,"column":47}},"29":{"start":{"line":52,"column":9},"end":{"line":117,"column":5}},"30":{"start":{"line":53,"column":6},"end":{"line":53,"column":54}},"31":{"start":{"line":54,"column":6},"end":{"line":54,"column":51}},"32":{"start":{"line":56,"column":9},"end":{"line":117,"column":5}},"33":{"start":{"line":57,"column":6},"end":{"line":57,"column":50}},"34":{"start":{"line":58,"column":6},"end":{"line":58,"column":47}},"35":{"start":{"line":60,"column":9},"end":{"line":117,"column":5}},"36":{"start":{"line":61,"column":6},"end":{"line":64,"column":8}},"37":{"start":{"line":65,"column":6},"end":{"line":65,"column":54}},"38":{"start":{"line":66,"column":6},"end":{"line":66,"column":47}},"39":{"start":{"line":68,"column":9},"end":{"line":117,"column":5}},"40":{"start":{"line":69,"column":6},"end":{"line":72,"column":8}},"41":{"start":{"line":73,"column":6},"end":{"line":73,"column":50}},"42":{"start":{"line":74,"column":6},"end":{"line":74,"column":51}},"43":{"start":{"line":77,"column":6},"end":{"line":77,"column":56}},"44":{"start":{"line":78,"column":6},"end":{"line":116,"column":7}},"45":{"start":{"line":79,"column":8},"end":{"line":82,"column":10}},"46":{"start":{"line":83,"column":8},"end":{"line":83,"column":53}},"47":{"start":{"line":86,"column":8},"end":{"line":86,"column":22}},"48":{"start":{"line":87,"column":8},"end":{"line":87,"column":28}},"49":{"start":{"line":88,"column":8},"end":{"line":95,"column":9}},"50":{"start":{"line":93,"column":10},"end":{"line":93,"column":14}},"51":{"start":{"line":94,"column":10},"end":{"line":94,"column":14}},"52":{"start":{"line":96,"column":8},"end":{"line":115,"column":9}},"53":{"start":{"line":97,"column":10},"end":{"line":105,"column":11}},"54":{"start":{"line":98,"column":12},"end":{"line":98,"column":62}},"55":{"start":{"line":100,"column":12},"end":{"line":104,"column":14}},"56":{"start":{"line":106,"column":10},"end":{"line":106,"column":27}},"57":{"start":{"line":107,"column":10},"end":{"line":107,"column":26}},"58":{"start":{"line":108,"column":10},"end":{"line":108,"column":45}},"59":{"start":{"line":109,"column":10},"end":{"line":109,"column":43}},"60":{"start":{"line":111,"column":10},"end":{"line":111,"column":41}},"61":{"start":{"line":112,"column":10},"end":{"line":112,"column":37}},"62":{"start":{"line":113,"column":10},"end":{"line":113,"column":72}},"63":{"start":{"line":114,"column":10},"end":{"line":114,"column":55}},"64":{"start":{"line":119,"column":2},"end":{"line":148,"column":3}},"65":{"start":{"line":120,"column":4},"end":{"line":147,"column":5}},"66":{"start":{"line":121,"column":6},"end":{"line":121,"column":45}},"67":{"start":{"line":122,"column":6},"end":{"line":122,"column":55}},"68":{"start":{"line":123,"column":6},"end":{"line":132,"column":7}},"69":{"start":{"line":124,"column":8},"end":{"line":124,"column":73}},"70":{"start":{"line":127,"column":8},"end":{"line":127,"column":75}},"71":{"start":{"line":128,"column":8},"end":{"line":130,"column":9}},"72":{"start":{"line":129,"column":10},"end":{"line":129,"column":67}},"73":{"start":{"line":131,"column":8},"end":{"line":131,"column":49}},"74":{"start":{"line":135,"column":6},"end":{"line":136,"column":23}},"75":{"start":{"line":136,"column":8},"end":{"line":136,"column":23}},"76":{"start":{"line":137,"column":6},"end":{"line":146,"column":7}},"77":{"start":{"line":138,"column":8},"end":{"line":138,"column":68}},"78":{"start":{"line":141,"column":8},"end":{"line":145,"column":10}},"79":{"start":{"line":149,"column":2},"end":{"line":149,"column":21}},"80":{"start":{"line":152,"column":0},"end":{"line":152,"column":78}}},"branchMap":{"1":{"line":13,"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":13,"column":2}},{"start":{"line":13,"column":2},"end":{"line":13,"column":2}}]},"2":{"line":30,"type":"binary-expr","locations":[{"start":{"line":30,"column":14},"end":{"line":30,"column":21}},{"start":{"line":30,"column":25},"end":{"line":30,"column":33}}]},"3":{"line":31,"type":"cond-expr","locations":[{"start":{"line":31,"column":38},"end":{"line":31,"column":42}},{"start":{"line":31,"column":45},"end":{"line":31,"column":63}}]},"4":{"line":39,"type":"binary-expr","locations":[{"start":{"line":39,"column":9},"end":{"line":39,"column":35}},{"start":{"line":39,"column":39},"end":{"line":39,"column":63}}]},"5":{"line":40,"type":"if","locations":[{"start":{"line":40,"column":4},"end":{"line":40,"column":4}},{"start":{"line":40,"column":4},"end":{"line":40,"column":4}}]},"6":{"line":43,"type":"if","locations":[{"start":{"line":43,"column":9},"end":{"line":43,"column":9}},{"start":{"line":43,"column":9},"end":{"line":43,"column":9}}]},"7":{"line":46,"type":"if","locations":[{"start":{"line":46,"column":9},"end":{"line":46,"column":9}},{"start":{"line":46,"column":9},"end":{"line":46,"column":9}}]},"8":{"line":49,"type":"if","locations":[{"start":{"line":49,"column":9},"end":{"line":49,"column":9}},{"start":{"line":49,"column":9},"end":{"line":49,"column":9}}]},"9":{"line":52,"type":"if","locations":[{"start":{"line":52,"column":9},"end":{"line":52,"column":9}},{"start":{"line":52,"column":9},"end":{"line":52,"column":9}}]},"10":{"line":56,"type":"if","locations":[{"start":{"line":56,"column":9},"end":{"line":56,"column":9}},{"start":{"line":56,"column":9},"end":{"line":56,"column":9}}]},"11":{"line":60,"type":"if","locations":[{"start":{"line":60,"column":9},"end":{"line":60,"column":9}},{"start":{"line":60,"column":9},"end":{"line":60,"column":9}}]},"12":{"line":68,"type":"if","locations":[{"start":{"line":68,"column":9},"end":{"line":68,"column":9}},{"start":{"line":68,"column":9},"end":{"line":68,"column":9}}]},"13":{"line":78,"type":"if","locations":[{"start":{"line":78,"column":6},"end":{"line":78,"column":6}},{"start":{"line":78,"column":6},"end":{"line":78,"column":6}}]},"14":{"line":89,"type":"binary-expr","locations":[{"start":{"line":89,"column":10},"end":{"line":89,"column":25}},{"start":{"line":90,"column":10},"end":{"line":90,"column":24}},{"start":{"line":91,"column":10},"end":{"line":91,"column":44}}]},"15":{"line":96,"type":"if","locations":[{"start":{"line":96,"column":8},"end":{"line":96,"column":8}},{"start":{"line":96,"column":8},"end":{"line":96,"column":8}}]},"16":{"line":97,"type":"if","locations":[{"start":{"line":97,"column":10},"end":{"line":97,"column":10}},{"start":{"line":97,"column":10},"end":{"line":97,"column":10}}]},"17":{"line":119,"type":"if","locations":[{"start":{"line":119,"column":2},"end":{"line":119,"column":2}},{"start":{"line":119,"column":2},"end":{"line":119,"column":2}}]},"18":{"line":119,"type":"binary-expr","locations":[{"start":{"line":119,"column":6},"end":{"line":119,"column":32}},{"start":{"line":119,"column":36},"end":{"line":119,"column":60}}]},"19":{"line":120,"type":"if","locations":[{"start":{"line":120,"column":4},"end":{"line":120,"column":4}},{"start":{"line":120,"column":4},"end":{"line":120,"column":4}}]},"20":{"line":122,"type":"cond-expr","locations":[{"start":{"line":122,"column":34},"end":{"line":122,"column":40}},{"start":{"line":122,"column":43},"end":{"line":122,"column":54}}]},"21":{"line":123,"type":"if","locations":[{"start":{"line":123,"column":6},"end":{"line":123,"column":6}},{"start":{"line":123,"column":6},"end":{"line":123,"column":6}}]},"22":{"line":135,"type":"if","locations":[{"start":{"line":135,"column":6},"end":{"line":135,"column":6}},{"start":{"line":135,"column":6},"end":{"line":135,"column":6}}]},"23":{"line":137,"type":"if","locations":[{"start":{"line":137,"column":6},"end":{"line":137,"column":6}},{"start":{"line":137,"column":6},"end":{"line":137,"column":6}}]}}}} \ No newline at end of file diff --git a/coverage/lcov-report/cjs/index.html b/coverage/lcov-report/cjs/index.html index c03d675..77963a1 100644 --- a/coverage/lcov-report/cjs/index.html +++ b/coverage/lcov-report/cjs/index.html @@ -22,12 +22,12 @@

100% Statements - 78/78 + 80/80
100% Branches - 45/45 + 47/47
100% @@ -37,7 +37,7 @@

100% Lines - 76/76 + 79/79

@@ -62,13 +62,13 @@

index.js
100% - 78/78 + 80/80 100% - 45/45 + 47/47 100% 0/0 100% - 76/76 + 79/79 @@ -77,7 +77,7 @@

diff --git a/coverage/lcov-report/cjs/index.js.html b/coverage/lcov-report/cjs/index.js.html index 19a5317..2584e1c 100644 --- a/coverage/lcov-report/cjs/index.js.html +++ b/coverage/lcov-report/cjs/index.js.html @@ -22,12 +22,12 @@

100% Statements - 78/78 + 80/80
100% Branches - 45/45 + 47/47
100% @@ -37,7 +37,7 @@

100% Lines - 76/76 + 79/79

@@ -190,7 +190,12 @@

145 146 147 -148  +148 +149 +150 +151 +152 +153        @@ -199,15 +204,19 @@

      -517× +532×   +25× + +  24× 24× 24× 24×     +      @@ -215,37 +224,37 @@

      -104× -104× -104× -104× -104× -104× -104× -104× -104× -104× -421× +107× +107× +107× +107× +107× +107× +107× +107× +107× +107× +424× 38×   -383× +386×   -380× +383× 22×   -358× +361×   -353× +356× 135× 135×   -218× +221× 52× 52×   -166× +169× 55×     @@ -253,7 +262,7 @@

55× 55×   -111× +114× 21×     @@ -262,8 +271,8 @@

21×     -90× -90× +93× +93× 55×     @@ -271,58 +280,59 @@

55×     -35× -35× -35× +38× +38× +38×         -54× -54× +58× +58×   -35× -12× +38× +13× 11×   - +           -12× -12× -12× -12× +13× +13× +13× +13×   -23× -23× -23× -23× +25× +25× +25× +25×         -104× -83× -34× -34× -34× +107× +86× +36× +36× +36× 13×     -21× -21× -58× +23× +23× +66×   -21× +23×       -49× -49× -26× +50× + +50× +27×     23× @@ -333,7 +343,7 @@

      -104× +107×     @@ -349,10 +359,14 @@

const identity = O => O;   const remove = (parentNode, before, after) => { - const range = parentNode.ownerDocument.createRange(); - range.setStartBefore(before); - range.setEndAfter(after); - range.deleteContents(); + if (after == null) { + parentNode.removeChild(before); + } else { + const range = parentNode.ownerDocument.createRange(); + range.setStartBefore(before); + range.setEndAfter(after); + range.deleteContents(); + } };   const domdiff = ( @@ -467,7 +481,8 @@

} } else { - if (currentNodes[currentStart] == null) currentStart++; + if (currentNodes[currentStart] == null) + currentStart++; if (currentStart === currentEnd) { parentNode.removeChild(get(currentNodes[currentStart], -1)); } @@ -490,7 +505,7 @@

diff --git a/coverage/lcov-report/index.html b/coverage/lcov-report/index.html index b59c640..e68fbf4 100644 --- a/coverage/lcov-report/index.html +++ b/coverage/lcov-report/index.html @@ -22,12 +22,12 @@

100% Statements - 78/78 + 80/80
100% Branches - 45/45 + 47/47
100% @@ -37,7 +37,7 @@

100% Lines - 76/76 + 79/79

@@ -62,13 +62,13 @@

cjs/
100% - 78/78 + 80/80 100% - 45/45 + 47/47 100% 0/0 100% - 76/76 + 79/79 @@ -77,7 +77,7 @@

diff --git a/coverage/lcov.info b/coverage/lcov.info index 78e3e49..2c2c0a0 100644 --- a/coverage/lcov.info +++ b/coverage/lcov.info @@ -1,130 +1,135 @@ TN: -SF:/home/webreflection/code/domdiff/cjs/index.js +SF:/Users/agiammarchi/git/domdiff/cjs/index.js FNF:0 FNH:0 -DA:10,517 +DA:10,532 DA:12,1 -DA:13,24 -DA:14,24 -DA:15,24 +DA:13,25 +DA:14,1 DA:16,24 -DA:19,1 -DA:26,104 -DA:27,104 -DA:28,104 -DA:29,104 -DA:30,104 -DA:31,104 -DA:32,104 -DA:33,104 -DA:34,104 -DA:35,104 -DA:36,421 -DA:37,38 -DA:39,383 -DA:40,3 -DA:42,380 -DA:43,22 -DA:45,358 -DA:46,5 -DA:48,353 -DA:49,135 -DA:50,135 -DA:52,218 -DA:53,52 -DA:54,52 -DA:56,166 -DA:57,55 +DA:17,24 +DA:18,24 +DA:19,24 +DA:23,1 +DA:30,107 +DA:31,107 +DA:32,107 +DA:33,107 +DA:34,107 +DA:35,107 +DA:36,107 +DA:37,107 +DA:38,107 +DA:39,107 +DA:40,424 +DA:41,38 +DA:43,386 +DA:44,3 +DA:46,383 +DA:47,22 +DA:49,361 +DA:50,5 +DA:52,356 +DA:53,135 +DA:54,135 +DA:56,221 +DA:57,52 +DA:58,52 +DA:60,169 DA:61,55 -DA:62,55 -DA:64,111 -DA:65,21 +DA:65,55 +DA:66,55 +DA:68,114 DA:69,21 -DA:70,21 -DA:73,90 -DA:74,90 -DA:75,55 +DA:73,21 +DA:74,21 +DA:77,93 +DA:78,93 DA:79,55 -DA:82,35 -DA:83,35 -DA:84,35 -DA:89,54 -DA:90,54 -DA:92,35 -DA:93,12 -DA:94,11 -DA:96,1 -DA:102,12 -DA:103,12 -DA:104,12 -DA:105,12 -DA:107,23 -DA:108,23 -DA:109,23 -DA:110,23 -DA:115,104 -DA:116,83 -DA:117,34 -DA:118,34 -DA:119,34 -DA:120,13 -DA:123,21 -DA:124,21 -DA:125,58 -DA:127,21 -DA:131,49 -DA:132,49 -DA:133,26 -DA:136,23 -DA:144,104 -DA:147,1 -LF:76 -LH:76 -BRDA:26,1,0,104 -BRDA:26,1,1,102 -BRDA:27,2,0,53 -BRDA:27,2,1,51 -BRDA:35,3,0,525 -BRDA:35,3,1,470 -BRDA:36,4,0,38 -BRDA:36,4,1,383 -BRDA:39,5,0,3 -BRDA:39,5,1,380 -BRDA:42,6,0,22 -BRDA:42,6,1,358 -BRDA:45,7,0,5 -BRDA:45,7,1,353 -BRDA:48,8,0,135 -BRDA:48,8,1,218 -BRDA:52,9,0,52 -BRDA:52,9,1,166 -BRDA:56,10,0,55 -BRDA:56,10,1,111 -BRDA:64,11,0,21 -BRDA:64,11,1,90 -BRDA:74,12,0,55 -BRDA:74,12,1,35 -BRDA:85,13,0,89 -BRDA:85,13,1,82 -BRDA:85,13,2,79 -BRDA:92,14,0,12 -BRDA:92,14,1,23 -BRDA:93,15,0,11 -BRDA:93,15,1,1 -BRDA:115,16,0,83 -BRDA:115,16,1,21 -BRDA:115,17,0,104 -BRDA:115,17,1,55 -BRDA:116,18,0,34 -BRDA:116,18,1,49 -BRDA:118,19,0,25 -BRDA:118,19,1,9 -BRDA:119,20,0,13 -BRDA:119,20,1,21 -BRDA:131,21,0,2 -BRDA:131,21,1,47 -BRDA:132,22,0,26 -BRDA:132,22,1,23 -BRF:45 -BRH:45 +DA:83,55 +DA:86,38 +DA:87,38 +DA:88,38 +DA:93,58 +DA:94,58 +DA:96,38 +DA:97,13 +DA:98,11 +DA:100,2 +DA:106,13 +DA:107,13 +DA:108,13 +DA:109,13 +DA:111,25 +DA:112,25 +DA:113,25 +DA:114,25 +DA:119,107 +DA:120,86 +DA:121,36 +DA:122,36 +DA:123,36 +DA:124,13 +DA:127,23 +DA:128,23 +DA:129,66 +DA:131,23 +DA:135,50 +DA:136,2 +DA:137,50 +DA:138,27 +DA:141,23 +DA:149,107 +DA:152,1 +LF:79 +LH:79 +BRDA:13,1,0,1 +BRDA:13,1,1,24 +BRDA:30,2,0,107 +BRDA:30,2,1,105 +BRDA:31,3,0,56 +BRDA:31,3,1,51 +BRDA:39,4,0,531 +BRDA:39,4,1,474 +BRDA:40,5,0,38 +BRDA:40,5,1,386 +BRDA:43,6,0,3 +BRDA:43,6,1,383 +BRDA:46,7,0,22 +BRDA:46,7,1,361 +BRDA:49,8,0,5 +BRDA:49,8,1,356 +BRDA:52,9,0,135 +BRDA:52,9,1,221 +BRDA:56,10,0,52 +BRDA:56,10,1,169 +BRDA:60,11,0,55 +BRDA:60,11,1,114 +BRDA:68,12,0,21 +BRDA:68,12,1,93 +BRDA:78,13,0,55 +BRDA:78,13,1,38 +BRDA:89,14,0,96 +BRDA:89,14,1,88 +BRDA:89,14,2,85 +BRDA:96,15,0,13 +BRDA:96,15,1,25 +BRDA:97,16,0,11 +BRDA:97,16,1,2 +BRDA:119,17,0,86 +BRDA:119,17,1,21 +BRDA:119,18,0,107 +BRDA:119,18,1,57 +BRDA:120,19,0,36 +BRDA:120,19,1,50 +BRDA:122,20,0,27 +BRDA:122,20,1,9 +BRDA:123,21,0,13 +BRDA:123,21,1,23 +BRDA:135,22,0,2 +BRDA:135,22,1,48 +BRDA:137,23,0,27 +BRDA:137,23,1,23 +BRF:47 +BRH:47 end_of_record diff --git a/esm/index.js b/esm/index.js index 9e5c0b7..368467c 100644 --- a/esm/index.js +++ b/esm/index.js @@ -9,10 +9,14 @@ const identity = O => O; const remove = (parentNode, before, after) => { - const range = parentNode.ownerDocument.createRange(); - range.setStartBefore(before); - range.setEndAfter(after); - range.deleteContents(); + if (after == null) { + parentNode.removeChild(before); + } else { + const range = parentNode.ownerDocument.createRange(); + range.setStartBefore(before); + range.setEndAfter(after); + range.deleteContents(); + } }; const domdiff = ( @@ -127,7 +131,8 @@ const domdiff = ( } } else { - if (currentNodes[currentStart] == null) currentStart++; + if (currentNodes[currentStart] == null) + currentStart++; if (currentStart === currentEnd) { parentNode.removeChild(get(currentNodes[currentStart], -1)); } diff --git a/index.js b/index.js index f7121e9..9229c35 100644 --- a/index.js +++ b/index.js @@ -14,10 +14,14 @@ var identity = function identity(O) { }; var remove = function remove(parentNode, before, after) { - var range = parentNode.ownerDocument.createRange(); - range.setStartBefore(before); - range.setEndAfter(after); - range.deleteContents(); + if (after == null) { + parentNode.removeChild(before); + } else { + var range = parentNode.ownerDocument.createRange(); + range.setStartBefore(before); + range.setEndAfter(after); + range.deleteContents(); + } }; var domdiff = function domdiff(parentNode, // where changes happen diff --git a/min.js b/min.js index fd8234b..438803e 100644 --- a/min.js +++ b/min.js @@ -1,2 +1,2 @@ var domdiff=function(){"use strict";/*! (c) 2017 Andrea Giammarchi (ISC) */ -var e=function(e){return e},n=function(e,n,r){var l=e.ownerDocument.createRange();l.setStartBefore(n),l.setEndAfter(r),l.deleteContents()};return function(r,l,t,f,i){for(var o=f||e,s=null==i?null:o(i,0),u=0,a=0,v=l.length-1,c=l[0],d=l[v],m=t.length-1,B=t[0],g=t[m];u<=v&&a<=m;)if(null==c)c=l[++u];else if(null==d)d=l[--v];else if(null==B)B=t[++a];else if(null==g)g=t[--m];else if(c==B)c=l[++u],B=t[++a];else if(d==g)d=l[--v],g=t[--m];else if(c==g)r.insertBefore(o(c,1),o(d,-0).nextSibling),c=l[++u],g=t[--m];else if(d==B)r.insertBefore(o(d,1),o(c,0)),d=l[--v],B=t[++a];else{var h=l.indexOf(B);if(h<0)r.insertBefore(o(B,1),o(c,0)),B=t[++a];else{for(var C=h,D=a;C<=v&&D<=m&&l[C]===t[D];)C++,D++;if(1v){var w=t[m+1],x=null==w?s:o(w,0);if(a===m)r.insertBefore(o(t[a],1),x);else{for(var S=r.ownerDocument.createDocumentFragment();a<=m;)S.appendChild(o(t[a++],1));r.insertBefore(S,x)}}else null==l[u]&&u++,u===v?r.removeChild(o(l[u],-1)):n(r,o(l[u],-1),o(l[v],-1));return t}}(); \ No newline at end of file +var e=function(e){return e},n=function(e,n,r){if(null==r)e.removeChild(n);else{var l=e.ownerDocument.createRange();l.setStartBefore(n),l.setEndAfter(r),l.deleteContents()}};return function(r,l,i,f,t){for(var o=f||e,s=null==t?null:o(t,0),u=0,a=0,v=l.length-1,c=l[0],d=l[v],m=i.length-1,B=i[0],h=i[m];u<=v&&a<=m;)if(null==c)c=l[++u];else if(null==d)d=l[--v];else if(null==B)B=i[++a];else if(null==h)h=i[--m];else if(c==B)c=l[++u],B=i[++a];else if(d==h)d=l[--v],h=i[--m];else if(c==h)r.insertBefore(o(c,1),o(d,-0).nextSibling),c=l[++u],h=i[--m];else if(d==B)r.insertBefore(o(d,1),o(c,0)),d=l[--v],B=i[++a];else{var g=l.indexOf(B);if(g<0)r.insertBefore(o(B,1),o(c,0)),B=i[++a];else{for(var C=g,D=a;C<=v&&D<=m&&l[C]===i[D];)C++,D++;if(1v){var w=i[m+1],x=null==w?s:o(w,0);if(a===m)r.insertBefore(o(i[a],1),x);else{for(var S=r.ownerDocument.createDocumentFragment();a<=m;)S.appendChild(o(i[a++],1));r.insertBefore(S,x)}}else null==l[u]&&u++,u===v?r.removeChild(o(l[u],-1)):n(r,o(l[u],-1),o(l[v],-1));return i}}(); \ No newline at end of file diff --git a/test/test.js b/test/test.js index f7c4fa4..4f2cc37 100644 --- a/test/test.js +++ b/test/test.js @@ -949,5 +949,41 @@ newState = domdiff( ); compare(newState, 'a'); +newState = domdiff( + document.body, + newState, + [] +); + +var data = [ + {"id": 4054, "title": "Serie 2"}, + {"id": 3982, "title": "Serie 3"}, + {"id": 4016, "title": "Gracias"}, + {"id":3984, "title": "Comparte"}, + {"id":3952, "title": "Lección 1"}, + {"id":3955, "title": "Lección 2"} +]; + +var wm = new WeakMap; + +var getItem = function (item) { return wm.get(item); }; + +data.forEach(function (item) { + wm.set(item, document.createTextNode(item.id + ': ' + item.title)); +}); + +newState = domdiff( + document.body, + newState, + data.slice().map(getItem) +); + +newState = domdiff( + document.body, + newState, + data.slice().sort(function (a, b) { + return a.title.localeCompare(b.title); + }).map(getItem) +); tressa.end(); From f1b50d8787879a1fe14df2e7442453f181526ee3 Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Mon, 18 Jun 2018 11:29:12 +0200 Subject: [PATCH 29/71] 0.4.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e130705..67cbb3d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "domdiff", - "version": "0.4.0", + "version": "0.4.1", "description": "A fast and simple way to diff childNodes", "browser": "min.js", "main": "cjs/index.js", From 0a308e52a98d5a5b579cc5af3775ef3232750afd Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Mon, 18 Jun 2018 16:44:28 +0200 Subject: [PATCH 30/71] better fix for previous fix --- cjs/index.js | 18 ++++---- coverage/coverage.json | 2 +- coverage/lcov-report/cjs/index.html | 2 +- coverage/lcov-report/cjs/index.js.html | 28 +++++++----- coverage/lcov-report/index.html | 2 +- coverage/lcov.info | 62 +++++++++++++------------- esm/index.js | 18 ++++---- index.js | 12 ++--- min.js | 2 +- test/test.js | 6 +-- 10 files changed, 81 insertions(+), 71 deletions(-) diff --git a/cjs/index.js b/cjs/index.js index 208e6f4..8b7deb6 100644 --- a/cjs/index.js +++ b/cjs/index.js @@ -9,13 +9,13 @@ const identity = O => O; -const remove = (parentNode, before, after) => { +const remove = (get, parentNode, before, after) => { if (after == null) { - parentNode.removeChild(before); + parentNode.removeChild(get(before, -1)); } else { const range = parentNode.ownerDocument.createRange(); - range.setStartBefore(before); - range.setEndAfter(after); + range.setStartBefore(get(before, -1)); + range.setEndAfter(get(after, -1)); range.deleteContents(); } }; @@ -98,9 +98,10 @@ const domdiff = ( parentNode.removeChild(get(currentStartNode, -1)); } else { remove( + get, parentNode, - get(currentStartNode, -1), - get(currentNodes[index], -1) + currentStartNode, + currentNodes[index] ); } currentStart = i; @@ -139,9 +140,10 @@ const domdiff = ( } else { remove( + get, parentNode, - get(currentNodes[currentStart], -1), - get(currentNodes[currentEnd], -1) + currentNodes[currentStart], + currentNodes[currentEnd] ); } } diff --git a/coverage/coverage.json b/coverage/coverage.json index 267a1da..c8f4ac2 100644 --- a/coverage/coverage.json +++ b/coverage/coverage.json @@ -1 +1 @@ -{"/Users/agiammarchi/git/domdiff/cjs/index.js":{"path":"/Users/agiammarchi/git/domdiff/cjs/index.js","s":{"1":1,"2":532,"3":1,"4":25,"5":1,"6":24,"7":24,"8":24,"9":24,"10":1,"11":107,"12":107,"13":107,"14":107,"15":107,"16":107,"17":107,"18":107,"19":107,"20":107,"21":424,"22":38,"23":386,"24":3,"25":383,"26":22,"27":361,"28":5,"29":356,"30":135,"31":135,"32":221,"33":52,"34":52,"35":169,"36":55,"37":55,"38":55,"39":114,"40":21,"41":21,"42":21,"43":93,"44":93,"45":55,"46":55,"47":38,"48":38,"49":38,"50":58,"51":58,"52":38,"53":13,"54":11,"55":2,"56":13,"57":13,"58":13,"59":13,"60":25,"61":25,"62":25,"63":25,"64":107,"65":86,"66":36,"67":36,"68":36,"69":13,"70":23,"71":23,"72":66,"73":23,"74":50,"75":2,"76":50,"77":27,"78":23,"79":107,"80":1},"b":{"1":[1,24],"2":[107,105],"3":[56,51],"4":[531,474],"5":[38,386],"6":[3,383],"7":[22,361],"8":[5,356],"9":[135,221],"10":[52,169],"11":[55,114],"12":[21,93],"13":[55,38],"14":[96,88,85],"15":[13,25],"16":[11,2],"17":[86,21],"18":[107,57],"19":[36,50],"20":[27,9],"21":[13,23],"22":[2,48],"23":[27,23]},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":10,"column":0},"end":{"line":10,"column":24}},"2":{"start":{"line":10,"column":22},"end":{"line":10,"column":23}},"3":{"start":{"line":12,"column":0},"end":{"line":21,"column":2}},"4":{"start":{"line":13,"column":2},"end":{"line":20,"column":3}},"5":{"start":{"line":14,"column":4},"end":{"line":14,"column":35}},"6":{"start":{"line":16,"column":4},"end":{"line":16,"column":57}},"7":{"start":{"line":17,"column":4},"end":{"line":17,"column":33}},"8":{"start":{"line":18,"column":4},"end":{"line":18,"column":29}},"9":{"start":{"line":19,"column":4},"end":{"line":19,"column":27}},"10":{"start":{"line":23,"column":0},"end":{"line":150,"column":2}},"11":{"start":{"line":30,"column":2},"end":{"line":30,"column":34}},"12":{"start":{"line":31,"column":2},"end":{"line":31,"column":64}},"13":{"start":{"line":32,"column":2},"end":{"line":32,"column":40}},"14":{"start":{"line":33,"column":2},"end":{"line":33,"column":43}},"15":{"start":{"line":34,"column":2},"end":{"line":34,"column":41}},"16":{"start":{"line":35,"column":2},"end":{"line":35,"column":48}},"17":{"start":{"line":36,"column":2},"end":{"line":36,"column":41}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":39}},"19":{"start":{"line":38,"column":2},"end":{"line":38,"column":45}},"20":{"start":{"line":39,"column":2},"end":{"line":118,"column":3}},"21":{"start":{"line":40,"column":4},"end":{"line":117,"column":5}},"22":{"start":{"line":41,"column":6},"end":{"line":41,"column":54}},"23":{"start":{"line":43,"column":9},"end":{"line":117,"column":5}},"24":{"start":{"line":44,"column":6},"end":{"line":44,"column":50}},"25":{"start":{"line":46,"column":9},"end":{"line":117,"column":5}},"26":{"start":{"line":47,"column":6},"end":{"line":47,"column":51}},"27":{"start":{"line":49,"column":9},"end":{"line":117,"column":5}},"28":{"start":{"line":50,"column":6},"end":{"line":50,"column":47}},"29":{"start":{"line":52,"column":9},"end":{"line":117,"column":5}},"30":{"start":{"line":53,"column":6},"end":{"line":53,"column":54}},"31":{"start":{"line":54,"column":6},"end":{"line":54,"column":51}},"32":{"start":{"line":56,"column":9},"end":{"line":117,"column":5}},"33":{"start":{"line":57,"column":6},"end":{"line":57,"column":50}},"34":{"start":{"line":58,"column":6},"end":{"line":58,"column":47}},"35":{"start":{"line":60,"column":9},"end":{"line":117,"column":5}},"36":{"start":{"line":61,"column":6},"end":{"line":64,"column":8}},"37":{"start":{"line":65,"column":6},"end":{"line":65,"column":54}},"38":{"start":{"line":66,"column":6},"end":{"line":66,"column":47}},"39":{"start":{"line":68,"column":9},"end":{"line":117,"column":5}},"40":{"start":{"line":69,"column":6},"end":{"line":72,"column":8}},"41":{"start":{"line":73,"column":6},"end":{"line":73,"column":50}},"42":{"start":{"line":74,"column":6},"end":{"line":74,"column":51}},"43":{"start":{"line":77,"column":6},"end":{"line":77,"column":56}},"44":{"start":{"line":78,"column":6},"end":{"line":116,"column":7}},"45":{"start":{"line":79,"column":8},"end":{"line":82,"column":10}},"46":{"start":{"line":83,"column":8},"end":{"line":83,"column":53}},"47":{"start":{"line":86,"column":8},"end":{"line":86,"column":22}},"48":{"start":{"line":87,"column":8},"end":{"line":87,"column":28}},"49":{"start":{"line":88,"column":8},"end":{"line":95,"column":9}},"50":{"start":{"line":93,"column":10},"end":{"line":93,"column":14}},"51":{"start":{"line":94,"column":10},"end":{"line":94,"column":14}},"52":{"start":{"line":96,"column":8},"end":{"line":115,"column":9}},"53":{"start":{"line":97,"column":10},"end":{"line":105,"column":11}},"54":{"start":{"line":98,"column":12},"end":{"line":98,"column":62}},"55":{"start":{"line":100,"column":12},"end":{"line":104,"column":14}},"56":{"start":{"line":106,"column":10},"end":{"line":106,"column":27}},"57":{"start":{"line":107,"column":10},"end":{"line":107,"column":26}},"58":{"start":{"line":108,"column":10},"end":{"line":108,"column":45}},"59":{"start":{"line":109,"column":10},"end":{"line":109,"column":43}},"60":{"start":{"line":111,"column":10},"end":{"line":111,"column":41}},"61":{"start":{"line":112,"column":10},"end":{"line":112,"column":37}},"62":{"start":{"line":113,"column":10},"end":{"line":113,"column":72}},"63":{"start":{"line":114,"column":10},"end":{"line":114,"column":55}},"64":{"start":{"line":119,"column":2},"end":{"line":148,"column":3}},"65":{"start":{"line":120,"column":4},"end":{"line":147,"column":5}},"66":{"start":{"line":121,"column":6},"end":{"line":121,"column":45}},"67":{"start":{"line":122,"column":6},"end":{"line":122,"column":55}},"68":{"start":{"line":123,"column":6},"end":{"line":132,"column":7}},"69":{"start":{"line":124,"column":8},"end":{"line":124,"column":73}},"70":{"start":{"line":127,"column":8},"end":{"line":127,"column":75}},"71":{"start":{"line":128,"column":8},"end":{"line":130,"column":9}},"72":{"start":{"line":129,"column":10},"end":{"line":129,"column":67}},"73":{"start":{"line":131,"column":8},"end":{"line":131,"column":49}},"74":{"start":{"line":135,"column":6},"end":{"line":136,"column":23}},"75":{"start":{"line":136,"column":8},"end":{"line":136,"column":23}},"76":{"start":{"line":137,"column":6},"end":{"line":146,"column":7}},"77":{"start":{"line":138,"column":8},"end":{"line":138,"column":68}},"78":{"start":{"line":141,"column":8},"end":{"line":145,"column":10}},"79":{"start":{"line":149,"column":2},"end":{"line":149,"column":21}},"80":{"start":{"line":152,"column":0},"end":{"line":152,"column":78}}},"branchMap":{"1":{"line":13,"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":13,"column":2}},{"start":{"line":13,"column":2},"end":{"line":13,"column":2}}]},"2":{"line":30,"type":"binary-expr","locations":[{"start":{"line":30,"column":14},"end":{"line":30,"column":21}},{"start":{"line":30,"column":25},"end":{"line":30,"column":33}}]},"3":{"line":31,"type":"cond-expr","locations":[{"start":{"line":31,"column":38},"end":{"line":31,"column":42}},{"start":{"line":31,"column":45},"end":{"line":31,"column":63}}]},"4":{"line":39,"type":"binary-expr","locations":[{"start":{"line":39,"column":9},"end":{"line":39,"column":35}},{"start":{"line":39,"column":39},"end":{"line":39,"column":63}}]},"5":{"line":40,"type":"if","locations":[{"start":{"line":40,"column":4},"end":{"line":40,"column":4}},{"start":{"line":40,"column":4},"end":{"line":40,"column":4}}]},"6":{"line":43,"type":"if","locations":[{"start":{"line":43,"column":9},"end":{"line":43,"column":9}},{"start":{"line":43,"column":9},"end":{"line":43,"column":9}}]},"7":{"line":46,"type":"if","locations":[{"start":{"line":46,"column":9},"end":{"line":46,"column":9}},{"start":{"line":46,"column":9},"end":{"line":46,"column":9}}]},"8":{"line":49,"type":"if","locations":[{"start":{"line":49,"column":9},"end":{"line":49,"column":9}},{"start":{"line":49,"column":9},"end":{"line":49,"column":9}}]},"9":{"line":52,"type":"if","locations":[{"start":{"line":52,"column":9},"end":{"line":52,"column":9}},{"start":{"line":52,"column":9},"end":{"line":52,"column":9}}]},"10":{"line":56,"type":"if","locations":[{"start":{"line":56,"column":9},"end":{"line":56,"column":9}},{"start":{"line":56,"column":9},"end":{"line":56,"column":9}}]},"11":{"line":60,"type":"if","locations":[{"start":{"line":60,"column":9},"end":{"line":60,"column":9}},{"start":{"line":60,"column":9},"end":{"line":60,"column":9}}]},"12":{"line":68,"type":"if","locations":[{"start":{"line":68,"column":9},"end":{"line":68,"column":9}},{"start":{"line":68,"column":9},"end":{"line":68,"column":9}}]},"13":{"line":78,"type":"if","locations":[{"start":{"line":78,"column":6},"end":{"line":78,"column":6}},{"start":{"line":78,"column":6},"end":{"line":78,"column":6}}]},"14":{"line":89,"type":"binary-expr","locations":[{"start":{"line":89,"column":10},"end":{"line":89,"column":25}},{"start":{"line":90,"column":10},"end":{"line":90,"column":24}},{"start":{"line":91,"column":10},"end":{"line":91,"column":44}}]},"15":{"line":96,"type":"if","locations":[{"start":{"line":96,"column":8},"end":{"line":96,"column":8}},{"start":{"line":96,"column":8},"end":{"line":96,"column":8}}]},"16":{"line":97,"type":"if","locations":[{"start":{"line":97,"column":10},"end":{"line":97,"column":10}},{"start":{"line":97,"column":10},"end":{"line":97,"column":10}}]},"17":{"line":119,"type":"if","locations":[{"start":{"line":119,"column":2},"end":{"line":119,"column":2}},{"start":{"line":119,"column":2},"end":{"line":119,"column":2}}]},"18":{"line":119,"type":"binary-expr","locations":[{"start":{"line":119,"column":6},"end":{"line":119,"column":32}},{"start":{"line":119,"column":36},"end":{"line":119,"column":60}}]},"19":{"line":120,"type":"if","locations":[{"start":{"line":120,"column":4},"end":{"line":120,"column":4}},{"start":{"line":120,"column":4},"end":{"line":120,"column":4}}]},"20":{"line":122,"type":"cond-expr","locations":[{"start":{"line":122,"column":34},"end":{"line":122,"column":40}},{"start":{"line":122,"column":43},"end":{"line":122,"column":54}}]},"21":{"line":123,"type":"if","locations":[{"start":{"line":123,"column":6},"end":{"line":123,"column":6}},{"start":{"line":123,"column":6},"end":{"line":123,"column":6}}]},"22":{"line":135,"type":"if","locations":[{"start":{"line":135,"column":6},"end":{"line":135,"column":6}},{"start":{"line":135,"column":6},"end":{"line":135,"column":6}}]},"23":{"line":137,"type":"if","locations":[{"start":{"line":137,"column":6},"end":{"line":137,"column":6}},{"start":{"line":137,"column":6},"end":{"line":137,"column":6}}]}}}} \ No newline at end of file +{"/Users/agiammarchi/git/domdiff/cjs/index.js":{"path":"/Users/agiammarchi/git/domdiff/cjs/index.js","s":{"1":1,"2":531,"3":1,"4":25,"5":1,"6":24,"7":24,"8":24,"9":24,"10":1,"11":107,"12":107,"13":107,"14":107,"15":107,"16":107,"17":107,"18":107,"19":107,"20":107,"21":424,"22":38,"23":386,"24":3,"25":383,"26":22,"27":361,"28":5,"29":356,"30":135,"31":135,"32":221,"33":52,"34":52,"35":169,"36":55,"37":55,"38":55,"39":114,"40":21,"41":21,"42":21,"43":93,"44":93,"45":55,"46":55,"47":38,"48":38,"49":38,"50":58,"51":58,"52":38,"53":13,"54":11,"55":2,"56":13,"57":13,"58":13,"59":13,"60":25,"61":25,"62":25,"63":25,"64":107,"65":86,"66":36,"67":36,"68":36,"69":13,"70":23,"71":23,"72":66,"73":23,"74":50,"75":2,"76":50,"77":27,"78":23,"79":107,"80":1},"b":{"1":[1,24],"2":[107,105],"3":[56,51],"4":[531,474],"5":[38,386],"6":[3,383],"7":[22,361],"8":[5,356],"9":[135,221],"10":[52,169],"11":[55,114],"12":[21,93],"13":[55,38],"14":[96,88,85],"15":[13,25],"16":[11,2],"17":[86,21],"18":[107,57],"19":[36,50],"20":[27,9],"21":[13,23],"22":[2,48],"23":[27,23]},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":10,"column":0},"end":{"line":10,"column":24}},"2":{"start":{"line":10,"column":22},"end":{"line":10,"column":23}},"3":{"start":{"line":12,"column":0},"end":{"line":21,"column":2}},"4":{"start":{"line":13,"column":2},"end":{"line":20,"column":3}},"5":{"start":{"line":14,"column":4},"end":{"line":14,"column":44}},"6":{"start":{"line":16,"column":4},"end":{"line":16,"column":57}},"7":{"start":{"line":17,"column":4},"end":{"line":17,"column":42}},"8":{"start":{"line":18,"column":4},"end":{"line":18,"column":38}},"9":{"start":{"line":19,"column":4},"end":{"line":19,"column":27}},"10":{"start":{"line":23,"column":0},"end":{"line":152,"column":2}},"11":{"start":{"line":30,"column":2},"end":{"line":30,"column":34}},"12":{"start":{"line":31,"column":2},"end":{"line":31,"column":64}},"13":{"start":{"line":32,"column":2},"end":{"line":32,"column":40}},"14":{"start":{"line":33,"column":2},"end":{"line":33,"column":43}},"15":{"start":{"line":34,"column":2},"end":{"line":34,"column":41}},"16":{"start":{"line":35,"column":2},"end":{"line":35,"column":48}},"17":{"start":{"line":36,"column":2},"end":{"line":36,"column":41}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":39}},"19":{"start":{"line":38,"column":2},"end":{"line":38,"column":45}},"20":{"start":{"line":39,"column":2},"end":{"line":119,"column":3}},"21":{"start":{"line":40,"column":4},"end":{"line":118,"column":5}},"22":{"start":{"line":41,"column":6},"end":{"line":41,"column":54}},"23":{"start":{"line":43,"column":9},"end":{"line":118,"column":5}},"24":{"start":{"line":44,"column":6},"end":{"line":44,"column":50}},"25":{"start":{"line":46,"column":9},"end":{"line":118,"column":5}},"26":{"start":{"line":47,"column":6},"end":{"line":47,"column":51}},"27":{"start":{"line":49,"column":9},"end":{"line":118,"column":5}},"28":{"start":{"line":50,"column":6},"end":{"line":50,"column":47}},"29":{"start":{"line":52,"column":9},"end":{"line":118,"column":5}},"30":{"start":{"line":53,"column":6},"end":{"line":53,"column":54}},"31":{"start":{"line":54,"column":6},"end":{"line":54,"column":51}},"32":{"start":{"line":56,"column":9},"end":{"line":118,"column":5}},"33":{"start":{"line":57,"column":6},"end":{"line":57,"column":50}},"34":{"start":{"line":58,"column":6},"end":{"line":58,"column":47}},"35":{"start":{"line":60,"column":9},"end":{"line":118,"column":5}},"36":{"start":{"line":61,"column":6},"end":{"line":64,"column":8}},"37":{"start":{"line":65,"column":6},"end":{"line":65,"column":54}},"38":{"start":{"line":66,"column":6},"end":{"line":66,"column":47}},"39":{"start":{"line":68,"column":9},"end":{"line":118,"column":5}},"40":{"start":{"line":69,"column":6},"end":{"line":72,"column":8}},"41":{"start":{"line":73,"column":6},"end":{"line":73,"column":50}},"42":{"start":{"line":74,"column":6},"end":{"line":74,"column":51}},"43":{"start":{"line":77,"column":6},"end":{"line":77,"column":56}},"44":{"start":{"line":78,"column":6},"end":{"line":117,"column":7}},"45":{"start":{"line":79,"column":8},"end":{"line":82,"column":10}},"46":{"start":{"line":83,"column":8},"end":{"line":83,"column":53}},"47":{"start":{"line":86,"column":8},"end":{"line":86,"column":22}},"48":{"start":{"line":87,"column":8},"end":{"line":87,"column":28}},"49":{"start":{"line":88,"column":8},"end":{"line":95,"column":9}},"50":{"start":{"line":93,"column":10},"end":{"line":93,"column":14}},"51":{"start":{"line":94,"column":10},"end":{"line":94,"column":14}},"52":{"start":{"line":96,"column":8},"end":{"line":116,"column":9}},"53":{"start":{"line":97,"column":10},"end":{"line":106,"column":11}},"54":{"start":{"line":98,"column":12},"end":{"line":98,"column":62}},"55":{"start":{"line":100,"column":12},"end":{"line":105,"column":14}},"56":{"start":{"line":107,"column":10},"end":{"line":107,"column":27}},"57":{"start":{"line":108,"column":10},"end":{"line":108,"column":26}},"58":{"start":{"line":109,"column":10},"end":{"line":109,"column":45}},"59":{"start":{"line":110,"column":10},"end":{"line":110,"column":43}},"60":{"start":{"line":112,"column":10},"end":{"line":112,"column":41}},"61":{"start":{"line":113,"column":10},"end":{"line":113,"column":37}},"62":{"start":{"line":114,"column":10},"end":{"line":114,"column":72}},"63":{"start":{"line":115,"column":10},"end":{"line":115,"column":55}},"64":{"start":{"line":120,"column":2},"end":{"line":150,"column":3}},"65":{"start":{"line":121,"column":4},"end":{"line":149,"column":5}},"66":{"start":{"line":122,"column":6},"end":{"line":122,"column":45}},"67":{"start":{"line":123,"column":6},"end":{"line":123,"column":55}},"68":{"start":{"line":124,"column":6},"end":{"line":133,"column":7}},"69":{"start":{"line":125,"column":8},"end":{"line":125,"column":73}},"70":{"start":{"line":128,"column":8},"end":{"line":128,"column":75}},"71":{"start":{"line":129,"column":8},"end":{"line":131,"column":9}},"72":{"start":{"line":130,"column":10},"end":{"line":130,"column":67}},"73":{"start":{"line":132,"column":8},"end":{"line":132,"column":49}},"74":{"start":{"line":136,"column":6},"end":{"line":137,"column":23}},"75":{"start":{"line":137,"column":8},"end":{"line":137,"column":23}},"76":{"start":{"line":138,"column":6},"end":{"line":148,"column":7}},"77":{"start":{"line":139,"column":8},"end":{"line":139,"column":68}},"78":{"start":{"line":142,"column":8},"end":{"line":147,"column":10}},"79":{"start":{"line":151,"column":2},"end":{"line":151,"column":21}},"80":{"start":{"line":154,"column":0},"end":{"line":154,"column":78}}},"branchMap":{"1":{"line":13,"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":13,"column":2}},{"start":{"line":13,"column":2},"end":{"line":13,"column":2}}]},"2":{"line":30,"type":"binary-expr","locations":[{"start":{"line":30,"column":14},"end":{"line":30,"column":21}},{"start":{"line":30,"column":25},"end":{"line":30,"column":33}}]},"3":{"line":31,"type":"cond-expr","locations":[{"start":{"line":31,"column":38},"end":{"line":31,"column":42}},{"start":{"line":31,"column":45},"end":{"line":31,"column":63}}]},"4":{"line":39,"type":"binary-expr","locations":[{"start":{"line":39,"column":9},"end":{"line":39,"column":35}},{"start":{"line":39,"column":39},"end":{"line":39,"column":63}}]},"5":{"line":40,"type":"if","locations":[{"start":{"line":40,"column":4},"end":{"line":40,"column":4}},{"start":{"line":40,"column":4},"end":{"line":40,"column":4}}]},"6":{"line":43,"type":"if","locations":[{"start":{"line":43,"column":9},"end":{"line":43,"column":9}},{"start":{"line":43,"column":9},"end":{"line":43,"column":9}}]},"7":{"line":46,"type":"if","locations":[{"start":{"line":46,"column":9},"end":{"line":46,"column":9}},{"start":{"line":46,"column":9},"end":{"line":46,"column":9}}]},"8":{"line":49,"type":"if","locations":[{"start":{"line":49,"column":9},"end":{"line":49,"column":9}},{"start":{"line":49,"column":9},"end":{"line":49,"column":9}}]},"9":{"line":52,"type":"if","locations":[{"start":{"line":52,"column":9},"end":{"line":52,"column":9}},{"start":{"line":52,"column":9},"end":{"line":52,"column":9}}]},"10":{"line":56,"type":"if","locations":[{"start":{"line":56,"column":9},"end":{"line":56,"column":9}},{"start":{"line":56,"column":9},"end":{"line":56,"column":9}}]},"11":{"line":60,"type":"if","locations":[{"start":{"line":60,"column":9},"end":{"line":60,"column":9}},{"start":{"line":60,"column":9},"end":{"line":60,"column":9}}]},"12":{"line":68,"type":"if","locations":[{"start":{"line":68,"column":9},"end":{"line":68,"column":9}},{"start":{"line":68,"column":9},"end":{"line":68,"column":9}}]},"13":{"line":78,"type":"if","locations":[{"start":{"line":78,"column":6},"end":{"line":78,"column":6}},{"start":{"line":78,"column":6},"end":{"line":78,"column":6}}]},"14":{"line":89,"type":"binary-expr","locations":[{"start":{"line":89,"column":10},"end":{"line":89,"column":25}},{"start":{"line":90,"column":10},"end":{"line":90,"column":24}},{"start":{"line":91,"column":10},"end":{"line":91,"column":44}}]},"15":{"line":96,"type":"if","locations":[{"start":{"line":96,"column":8},"end":{"line":96,"column":8}},{"start":{"line":96,"column":8},"end":{"line":96,"column":8}}]},"16":{"line":97,"type":"if","locations":[{"start":{"line":97,"column":10},"end":{"line":97,"column":10}},{"start":{"line":97,"column":10},"end":{"line":97,"column":10}}]},"17":{"line":120,"type":"if","locations":[{"start":{"line":120,"column":2},"end":{"line":120,"column":2}},{"start":{"line":120,"column":2},"end":{"line":120,"column":2}}]},"18":{"line":120,"type":"binary-expr","locations":[{"start":{"line":120,"column":6},"end":{"line":120,"column":32}},{"start":{"line":120,"column":36},"end":{"line":120,"column":60}}]},"19":{"line":121,"type":"if","locations":[{"start":{"line":121,"column":4},"end":{"line":121,"column":4}},{"start":{"line":121,"column":4},"end":{"line":121,"column":4}}]},"20":{"line":123,"type":"cond-expr","locations":[{"start":{"line":123,"column":34},"end":{"line":123,"column":40}},{"start":{"line":123,"column":43},"end":{"line":123,"column":54}}]},"21":{"line":124,"type":"if","locations":[{"start":{"line":124,"column":6},"end":{"line":124,"column":6}},{"start":{"line":124,"column":6},"end":{"line":124,"column":6}}]},"22":{"line":136,"type":"if","locations":[{"start":{"line":136,"column":6},"end":{"line":136,"column":6}},{"start":{"line":136,"column":6},"end":{"line":136,"column":6}}]},"23":{"line":138,"type":"if","locations":[{"start":{"line":138,"column":6},"end":{"line":138,"column":6}},{"start":{"line":138,"column":6},"end":{"line":138,"column":6}}]}}}} \ No newline at end of file diff --git a/coverage/lcov-report/cjs/index.html b/coverage/lcov-report/cjs/index.html index 77963a1..5949b5a 100644 --- a/coverage/lcov-report/cjs/index.html +++ b/coverage/lcov-report/cjs/index.html @@ -77,7 +77,7 @@

diff --git a/coverage/lcov-report/cjs/index.js.html b/coverage/lcov-report/cjs/index.js.html index 2584e1c..9fd4566 100644 --- a/coverage/lcov-report/cjs/index.js.html +++ b/coverage/lcov-report/cjs/index.js.html @@ -195,7 +195,9 @@

150 151 152 -153  +153 +154 +155        @@ -204,7 +206,7 @@

      -532× +531×   25× @@ -300,6 +302,7 @@

      +  13× 13× 13× @@ -343,6 +346,7 @@

      +  107×     @@ -358,13 +362,13 @@

  const identity = O => O;   -const remove = (parentNode, before, after) => { +const remove = (get, parentNode, before, after) => { if (after == null) { - parentNode.removeChild(before); + parentNode.removeChild(get(before, -1)); } else { const range = parentNode.ownerDocument.createRange(); - range.setStartBefore(before); - range.setEndAfter(after); + range.setStartBefore(get(before, -1)); + range.setEndAfter(get(after, -1)); range.deleteContents(); } }; @@ -447,9 +451,10 @@

parentNode.removeChild(get(currentStartNode, -1)); } else { remove( + get, parentNode, - get(currentStartNode, -1), - get(currentNodes[index], -1) + currentStartNode, + currentNodes[index] ); } currentStart = i; @@ -488,9 +493,10 @@

} else { remove( + get, parentNode, - get(currentNodes[currentStart], -1), - get(currentNodes[currentEnd], -1) + currentNodes[currentStart], + currentNodes[currentEnd] ); } } @@ -505,7 +511,7 @@

diff --git a/coverage/lcov-report/index.html b/coverage/lcov-report/index.html index e68fbf4..41ab133 100644 --- a/coverage/lcov-report/index.html +++ b/coverage/lcov-report/index.html @@ -77,7 +77,7 @@

diff --git a/coverage/lcov.info b/coverage/lcov.info index 2c2c0a0..114f9a9 100644 --- a/coverage/lcov.info +++ b/coverage/lcov.info @@ -2,7 +2,7 @@ TN: SF:/Users/agiammarchi/git/domdiff/cjs/index.js FNF:0 FNH:0 -DA:10,532 +DA:10,531 DA:12,1 DA:13,25 DA:14,1 @@ -56,31 +56,31 @@ DA:96,38 DA:97,13 DA:98,11 DA:100,2 -DA:106,13 DA:107,13 DA:108,13 DA:109,13 -DA:111,25 +DA:110,13 DA:112,25 DA:113,25 DA:114,25 -DA:119,107 -DA:120,86 -DA:121,36 +DA:115,25 +DA:120,107 +DA:121,86 DA:122,36 DA:123,36 -DA:124,13 -DA:127,23 +DA:124,36 +DA:125,13 DA:128,23 -DA:129,66 -DA:131,23 -DA:135,50 -DA:136,2 -DA:137,50 -DA:138,27 -DA:141,23 -DA:149,107 -DA:152,1 +DA:129,23 +DA:130,66 +DA:132,23 +DA:136,50 +DA:137,2 +DA:138,50 +DA:139,27 +DA:142,23 +DA:151,107 +DA:154,1 LF:79 LH:79 BRDA:13,1,0,1 @@ -116,20 +116,20 @@ BRDA:96,15,0,13 BRDA:96,15,1,25 BRDA:97,16,0,11 BRDA:97,16,1,2 -BRDA:119,17,0,86 -BRDA:119,17,1,21 -BRDA:119,18,0,107 -BRDA:119,18,1,57 -BRDA:120,19,0,36 -BRDA:120,19,1,50 -BRDA:122,20,0,27 -BRDA:122,20,1,9 -BRDA:123,21,0,13 -BRDA:123,21,1,23 -BRDA:135,22,0,2 -BRDA:135,22,1,48 -BRDA:137,23,0,27 -BRDA:137,23,1,23 +BRDA:120,17,0,86 +BRDA:120,17,1,21 +BRDA:120,18,0,107 +BRDA:120,18,1,57 +BRDA:121,19,0,36 +BRDA:121,19,1,50 +BRDA:123,20,0,27 +BRDA:123,20,1,9 +BRDA:124,21,0,13 +BRDA:124,21,1,23 +BRDA:136,22,0,2 +BRDA:136,22,1,48 +BRDA:138,23,0,27 +BRDA:138,23,1,23 BRF:47 BRH:47 end_of_record diff --git a/esm/index.js b/esm/index.js index 368467c..c4b9f6e 100644 --- a/esm/index.js +++ b/esm/index.js @@ -8,13 +8,13 @@ const identity = O => O; -const remove = (parentNode, before, after) => { +const remove = (get, parentNode, before, after) => { if (after == null) { - parentNode.removeChild(before); + parentNode.removeChild(get(before, -1)); } else { const range = parentNode.ownerDocument.createRange(); - range.setStartBefore(before); - range.setEndAfter(after); + range.setStartBefore(get(before, -1)); + range.setEndAfter(get(after, -1)); range.deleteContents(); } }; @@ -97,9 +97,10 @@ const domdiff = ( parentNode.removeChild(get(currentStartNode, -1)); } else { remove( + get, parentNode, - get(currentStartNode, -1), - get(currentNodes[index], -1) + currentStartNode, + currentNodes[index] ); } currentStart = i; @@ -138,9 +139,10 @@ const domdiff = ( } else { remove( + get, parentNode, - get(currentNodes[currentStart], -1), - get(currentNodes[currentEnd], -1) + currentNodes[currentStart], + currentNodes[currentEnd] ); } } diff --git a/index.js b/index.js index 9229c35..e876d6b 100644 --- a/index.js +++ b/index.js @@ -13,13 +13,13 @@ var identity = function identity(O) { return O; }; -var remove = function remove(parentNode, before, after) { +var remove = function remove(get, parentNode, before, after) { if (after == null) { - parentNode.removeChild(before); + parentNode.removeChild(get(before, -1)); } else { var range = parentNode.ownerDocument.createRange(); - range.setStartBefore(before); - range.setEndAfter(after); + range.setStartBefore(get(before, -1)); + range.setEndAfter(get(after, -1)); range.deleteContents(); } }; @@ -79,7 +79,7 @@ beforeNode // optional item/node to use as insertBefore delimiter if (--index === currentStart) { parentNode.removeChild(get(currentStartNode, -1)); } else { - remove(parentNode, get(currentStartNode, -1), get(currentNodes[index], -1)); + remove(get, parentNode, currentStartNode, currentNodes[index]); } currentStart = i; futureStart = f; @@ -112,7 +112,7 @@ beforeNode // optional item/node to use as insertBefore delimiter if (currentStart === currentEnd) { parentNode.removeChild(get(currentNodes[currentStart], -1)); } else { - remove(parentNode, get(currentNodes[currentStart], -1), get(currentNodes[currentEnd], -1)); + remove(get, parentNode, currentNodes[currentStart], currentNodes[currentEnd]); } } } diff --git a/min.js b/min.js index 438803e..3018816 100644 --- a/min.js +++ b/min.js @@ -1,2 +1,2 @@ var domdiff=function(){"use strict";/*! (c) 2017 Andrea Giammarchi (ISC) */ -var e=function(e){return e},n=function(e,n,r){if(null==r)e.removeChild(n);else{var l=e.ownerDocument.createRange();l.setStartBefore(n),l.setEndAfter(r),l.deleteContents()}};return function(r,l,i,f,t){for(var o=f||e,s=null==t?null:o(t,0),u=0,a=0,v=l.length-1,c=l[0],d=l[v],m=i.length-1,B=i[0],h=i[m];u<=v&&a<=m;)if(null==c)c=l[++u];else if(null==d)d=l[--v];else if(null==B)B=i[++a];else if(null==h)h=i[--m];else if(c==B)c=l[++u],B=i[++a];else if(d==h)d=l[--v],h=i[--m];else if(c==h)r.insertBefore(o(c,1),o(d,-0).nextSibling),c=l[++u],h=i[--m];else if(d==B)r.insertBefore(o(d,1),o(c,0)),d=l[--v],B=i[++a];else{var g=l.indexOf(B);if(g<0)r.insertBefore(o(B,1),o(c,0)),B=i[++a];else{for(var C=g,D=a;C<=v&&D<=m&&l[C]===i[D];)C++,D++;if(1v){var w=i[m+1],x=null==w?s:o(w,0);if(a===m)r.insertBefore(o(i[a],1),x);else{for(var S=r.ownerDocument.createDocumentFragment();a<=m;)S.appendChild(o(i[a++],1));r.insertBefore(S,x)}}else null==l[u]&&u++,u===v?r.removeChild(o(l[u],-1)):n(r,o(l[u],-1),o(l[v],-1));return i}}(); \ No newline at end of file +var e=function(e){return e},n=function(e,n,r,l){if(null==l)n.removeChild(e(r,-1));else{var i=n.ownerDocument.createRange();i.setStartBefore(e(r,-1)),i.setEndAfter(e(l,-1)),i.deleteContents()}};return function(r,l,i,f,t){for(var o=f||e,s=null==t?null:o(t,0),u=0,a=0,v=l.length-1,c=l[0],d=l[v],m=i.length-1,B=i[0],h=i[m];u<=v&&a<=m;)if(null==c)c=l[++u];else if(null==d)d=l[--v];else if(null==B)B=i[++a];else if(null==h)h=i[--m];else if(c==B)c=l[++u],B=i[++a];else if(d==h)d=l[--v],h=i[--m];else if(c==h)r.insertBefore(o(c,1),o(d,-0).nextSibling),c=l[++u],h=i[--m];else if(d==B)r.insertBefore(o(d,1),o(c,0)),d=l[--v],B=i[++a];else{var g=l.indexOf(B);if(g<0)r.insertBefore(o(B,1),o(c,0)),B=i[++a];else{for(var C=g,D=a;C<=v&&D<=m&&l[C]===i[D];)C++,D++;if(1v){var w=i[m+1],x=null==w?s:o(w,0);if(a===m)r.insertBefore(o(i[a],1),x);else{for(var S=r.ownerDocument.createDocumentFragment();a<=m;)S.appendChild(o(i[a++],1));r.insertBefore(S,x)}}else null==l[u]&&u++,u===v?r.removeChild(o(l[u],-1)):n(o,r,l[u],l[v]);return i}}(); \ No newline at end of file diff --git a/test/test.js b/test/test.js index 4f2cc37..4e6563e 100644 --- a/test/test.js +++ b/test/test.js @@ -964,12 +964,12 @@ var data = [ {"id":3955, "title": "Lección 2"} ]; -var wm = new WeakMap; +var wm = {}; -var getItem = function (item) { return wm.get(item); }; +var getItem = function (item) { return wm[item.id]; }; data.forEach(function (item) { - wm.set(item, document.createTextNode(item.id + ': ' + item.title)); + wm[item.id] = document.createTextNode(item.id + ': ' + item.title); }); newState = domdiff( From 7471ca45bb81c4525e37f693986ad08d54dcdf69 Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Mon, 18 Jun 2018 16:44:32 +0200 Subject: [PATCH 31/71] 0.4.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 67cbb3d..a1362e4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "domdiff", - "version": "0.4.1", + "version": "0.4.2", "description": "A fast and simple way to diff childNodes", "browser": "min.js", "main": "cjs/index.js", From 41b1087a8e7637ca2e8bfa4150d3c08cdcffcb3d Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Sun, 24 Jun 2018 15:21:11 +0200 Subject: [PATCH 32/71] V1 - New signature with compare(a, b) hooks --- README.md | 22 ++- cjs/index.js | 23 ++- coverage/coverage.json | 2 +- coverage/lcov-report/cjs/index.html | 14 +- coverage/lcov-report/cjs/index.js.html | 47 +++-- coverage/lcov-report/index.html | 14 +- coverage/lcov.info | 252 +++++++++++++------------ esm/index.js | 23 ++- index.js | 24 ++- min.js | 2 +- test/test.js | 157 ++++++--------- 11 files changed, 293 insertions(+), 287 deletions(-) diff --git a/README.md b/README.md index 627f5a7..80d4a5d 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,10 @@ A vDOM-less implementation of the [snabbdom](https://github.com/snabbdom/snabbdom) diffing logic. +#### V1 breaking change + +The signature has moved from `parent, current[], future[], getNode(), beforeNode` to `parent, current[], future[], {before, compare(), node()}`. + ### Signature @@ -13,8 +17,10 @@ futureNodes = domdiff( parentNode, // where changes happen currentNodes, // Array of current items/nodes futureNodes, // Array of future items/nodes (returned) - getNode, // optional way to retrieve a node from an item - beforeNode // optional item/node to use as insertBefore delimiter + options // optional object with one of the following properties + // before: domNode + // compare(generic, generic) => true if same generic + // node(generic) => Node ); ``` @@ -58,9 +64,9 @@ parentNode.textContent; Every. JavaScript. Engine. -### A `getNode` callback for complex data +### A `{node: (generic, info) => node}` callback for complex data -The `getNode(item, info)` is invoked per each operation on the DOM. +The optional `{node: (generic, info) => node}` is invoked per each operation on the DOM. This can be useful to represent node through wrappers, whenever that is needed. @@ -74,7 +80,7 @@ The passed `info` value can be: [Example](https://codepen.io/WebReflection/pen/bYJVPd?editors=0010) ```js -function getNode(item, i) { +function node(item, i) { // case removal or case after if ((1 / i) < 0) { // case removal @@ -128,7 +134,7 @@ let content = domdiff( document.body, [], [Bob, and, Lucy], - getNode + {node} ); // ... later on ... @@ -136,7 +142,7 @@ content = domdiff( document.body, content, [Lucy, and, Bob], - getNode + {node} ); // clean up @@ -144,7 +150,7 @@ domdiff( document.body, content, [], - getNode + {node} ); ``` diff --git a/cjs/index.js b/cjs/index.js index 8b7deb6..cb01ee8 100644 --- a/cjs/index.js +++ b/cjs/index.js @@ -7,6 +7,8 @@ * @credits https://github.com/snabbdom/snabbdom */ +const eqeq = (a, b) => a == b; + const identity = O => O; const remove = (get, parentNode, before, after) => { @@ -24,11 +26,16 @@ const domdiff = ( parentNode, // where changes happen currentNodes, // Array of current items/nodes futureNodes, // Array of future items/nodes - getNode, // optional way to retrieve a node from an item - beforeNode // optional item/node to use as insertBefore delimiter + options // optional object with one of the following properties + // before: domNode + // compare(generic, generic) => true if same generic + // node(generic) => Node ) => { - const get = getNode || identity; - const before = beforeNode == null ? null : get(beforeNode, 0); + if (!options) + options = {}; + const compare = options.compare || eqeq; + const get = options.node || identity; + const before = options.before == null ? null : get(options.before, 0); let currentStart = 0, futureStart = 0; let currentEnd = currentNodes.length - 1; let currentStartNode = currentNodes[0]; @@ -49,15 +56,15 @@ const domdiff = ( else if (futureEndNode == null) { futureEndNode = futureNodes[--futureEnd]; } - else if (currentStartNode == futureStartNode) { + else if (compare(currentStartNode, futureStartNode)) { currentStartNode = currentNodes[++currentStart]; futureStartNode = futureNodes[++futureStart]; } - else if (currentEndNode == futureEndNode) { + else if (compare(currentEndNode, futureEndNode)) { currentEndNode = currentNodes[--currentEnd]; futureEndNode = futureNodes[--futureEnd]; } - else if (currentStartNode == futureEndNode) { + else if (compare(currentStartNode, futureEndNode)) { parentNode.insertBefore( get(currentStartNode, 1), get(currentEndNode, -0).nextSibling @@ -65,7 +72,7 @@ const domdiff = ( currentStartNode = currentNodes[++currentStart]; futureEndNode = futureNodes[--futureEnd]; } - else if (currentEndNode == futureStartNode) { + else if (compare(currentEndNode, futureStartNode)) { parentNode.insertBefore( get(currentEndNode, 1), get(currentStartNode, 0) diff --git a/coverage/coverage.json b/coverage/coverage.json index c8f4ac2..1e95d18 100644 --- a/coverage/coverage.json +++ b/coverage/coverage.json @@ -1 +1 @@ -{"/Users/agiammarchi/git/domdiff/cjs/index.js":{"path":"/Users/agiammarchi/git/domdiff/cjs/index.js","s":{"1":1,"2":531,"3":1,"4":25,"5":1,"6":24,"7":24,"8":24,"9":24,"10":1,"11":107,"12":107,"13":107,"14":107,"15":107,"16":107,"17":107,"18":107,"19":107,"20":107,"21":424,"22":38,"23":386,"24":3,"25":383,"26":22,"27":361,"28":5,"29":356,"30":135,"31":135,"32":221,"33":52,"34":52,"35":169,"36":55,"37":55,"38":55,"39":114,"40":21,"41":21,"42":21,"43":93,"44":93,"45":55,"46":55,"47":38,"48":38,"49":38,"50":58,"51":58,"52":38,"53":13,"54":11,"55":2,"56":13,"57":13,"58":13,"59":13,"60":25,"61":25,"62":25,"63":25,"64":107,"65":86,"66":36,"67":36,"68":36,"69":13,"70":23,"71":23,"72":66,"73":23,"74":50,"75":2,"76":50,"77":27,"78":23,"79":107,"80":1},"b":{"1":[1,24],"2":[107,105],"3":[56,51],"4":[531,474],"5":[38,386],"6":[3,383],"7":[22,361],"8":[5,356],"9":[135,221],"10":[52,169],"11":[55,114],"12":[21,93],"13":[55,38],"14":[96,88,85],"15":[13,25],"16":[11,2],"17":[86,21],"18":[107,57],"19":[36,50],"20":[27,9],"21":[13,23],"22":[2,48],"23":[27,23]},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":10,"column":0},"end":{"line":10,"column":24}},"2":{"start":{"line":10,"column":22},"end":{"line":10,"column":23}},"3":{"start":{"line":12,"column":0},"end":{"line":21,"column":2}},"4":{"start":{"line":13,"column":2},"end":{"line":20,"column":3}},"5":{"start":{"line":14,"column":4},"end":{"line":14,"column":44}},"6":{"start":{"line":16,"column":4},"end":{"line":16,"column":57}},"7":{"start":{"line":17,"column":4},"end":{"line":17,"column":42}},"8":{"start":{"line":18,"column":4},"end":{"line":18,"column":38}},"9":{"start":{"line":19,"column":4},"end":{"line":19,"column":27}},"10":{"start":{"line":23,"column":0},"end":{"line":152,"column":2}},"11":{"start":{"line":30,"column":2},"end":{"line":30,"column":34}},"12":{"start":{"line":31,"column":2},"end":{"line":31,"column":64}},"13":{"start":{"line":32,"column":2},"end":{"line":32,"column":40}},"14":{"start":{"line":33,"column":2},"end":{"line":33,"column":43}},"15":{"start":{"line":34,"column":2},"end":{"line":34,"column":41}},"16":{"start":{"line":35,"column":2},"end":{"line":35,"column":48}},"17":{"start":{"line":36,"column":2},"end":{"line":36,"column":41}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":39}},"19":{"start":{"line":38,"column":2},"end":{"line":38,"column":45}},"20":{"start":{"line":39,"column":2},"end":{"line":119,"column":3}},"21":{"start":{"line":40,"column":4},"end":{"line":118,"column":5}},"22":{"start":{"line":41,"column":6},"end":{"line":41,"column":54}},"23":{"start":{"line":43,"column":9},"end":{"line":118,"column":5}},"24":{"start":{"line":44,"column":6},"end":{"line":44,"column":50}},"25":{"start":{"line":46,"column":9},"end":{"line":118,"column":5}},"26":{"start":{"line":47,"column":6},"end":{"line":47,"column":51}},"27":{"start":{"line":49,"column":9},"end":{"line":118,"column":5}},"28":{"start":{"line":50,"column":6},"end":{"line":50,"column":47}},"29":{"start":{"line":52,"column":9},"end":{"line":118,"column":5}},"30":{"start":{"line":53,"column":6},"end":{"line":53,"column":54}},"31":{"start":{"line":54,"column":6},"end":{"line":54,"column":51}},"32":{"start":{"line":56,"column":9},"end":{"line":118,"column":5}},"33":{"start":{"line":57,"column":6},"end":{"line":57,"column":50}},"34":{"start":{"line":58,"column":6},"end":{"line":58,"column":47}},"35":{"start":{"line":60,"column":9},"end":{"line":118,"column":5}},"36":{"start":{"line":61,"column":6},"end":{"line":64,"column":8}},"37":{"start":{"line":65,"column":6},"end":{"line":65,"column":54}},"38":{"start":{"line":66,"column":6},"end":{"line":66,"column":47}},"39":{"start":{"line":68,"column":9},"end":{"line":118,"column":5}},"40":{"start":{"line":69,"column":6},"end":{"line":72,"column":8}},"41":{"start":{"line":73,"column":6},"end":{"line":73,"column":50}},"42":{"start":{"line":74,"column":6},"end":{"line":74,"column":51}},"43":{"start":{"line":77,"column":6},"end":{"line":77,"column":56}},"44":{"start":{"line":78,"column":6},"end":{"line":117,"column":7}},"45":{"start":{"line":79,"column":8},"end":{"line":82,"column":10}},"46":{"start":{"line":83,"column":8},"end":{"line":83,"column":53}},"47":{"start":{"line":86,"column":8},"end":{"line":86,"column":22}},"48":{"start":{"line":87,"column":8},"end":{"line":87,"column":28}},"49":{"start":{"line":88,"column":8},"end":{"line":95,"column":9}},"50":{"start":{"line":93,"column":10},"end":{"line":93,"column":14}},"51":{"start":{"line":94,"column":10},"end":{"line":94,"column":14}},"52":{"start":{"line":96,"column":8},"end":{"line":116,"column":9}},"53":{"start":{"line":97,"column":10},"end":{"line":106,"column":11}},"54":{"start":{"line":98,"column":12},"end":{"line":98,"column":62}},"55":{"start":{"line":100,"column":12},"end":{"line":105,"column":14}},"56":{"start":{"line":107,"column":10},"end":{"line":107,"column":27}},"57":{"start":{"line":108,"column":10},"end":{"line":108,"column":26}},"58":{"start":{"line":109,"column":10},"end":{"line":109,"column":45}},"59":{"start":{"line":110,"column":10},"end":{"line":110,"column":43}},"60":{"start":{"line":112,"column":10},"end":{"line":112,"column":41}},"61":{"start":{"line":113,"column":10},"end":{"line":113,"column":37}},"62":{"start":{"line":114,"column":10},"end":{"line":114,"column":72}},"63":{"start":{"line":115,"column":10},"end":{"line":115,"column":55}},"64":{"start":{"line":120,"column":2},"end":{"line":150,"column":3}},"65":{"start":{"line":121,"column":4},"end":{"line":149,"column":5}},"66":{"start":{"line":122,"column":6},"end":{"line":122,"column":45}},"67":{"start":{"line":123,"column":6},"end":{"line":123,"column":55}},"68":{"start":{"line":124,"column":6},"end":{"line":133,"column":7}},"69":{"start":{"line":125,"column":8},"end":{"line":125,"column":73}},"70":{"start":{"line":128,"column":8},"end":{"line":128,"column":75}},"71":{"start":{"line":129,"column":8},"end":{"line":131,"column":9}},"72":{"start":{"line":130,"column":10},"end":{"line":130,"column":67}},"73":{"start":{"line":132,"column":8},"end":{"line":132,"column":49}},"74":{"start":{"line":136,"column":6},"end":{"line":137,"column":23}},"75":{"start":{"line":137,"column":8},"end":{"line":137,"column":23}},"76":{"start":{"line":138,"column":6},"end":{"line":148,"column":7}},"77":{"start":{"line":139,"column":8},"end":{"line":139,"column":68}},"78":{"start":{"line":142,"column":8},"end":{"line":147,"column":10}},"79":{"start":{"line":151,"column":2},"end":{"line":151,"column":21}},"80":{"start":{"line":154,"column":0},"end":{"line":154,"column":78}}},"branchMap":{"1":{"line":13,"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":13,"column":2}},{"start":{"line":13,"column":2},"end":{"line":13,"column":2}}]},"2":{"line":30,"type":"binary-expr","locations":[{"start":{"line":30,"column":14},"end":{"line":30,"column":21}},{"start":{"line":30,"column":25},"end":{"line":30,"column":33}}]},"3":{"line":31,"type":"cond-expr","locations":[{"start":{"line":31,"column":38},"end":{"line":31,"column":42}},{"start":{"line":31,"column":45},"end":{"line":31,"column":63}}]},"4":{"line":39,"type":"binary-expr","locations":[{"start":{"line":39,"column":9},"end":{"line":39,"column":35}},{"start":{"line":39,"column":39},"end":{"line":39,"column":63}}]},"5":{"line":40,"type":"if","locations":[{"start":{"line":40,"column":4},"end":{"line":40,"column":4}},{"start":{"line":40,"column":4},"end":{"line":40,"column":4}}]},"6":{"line":43,"type":"if","locations":[{"start":{"line":43,"column":9},"end":{"line":43,"column":9}},{"start":{"line":43,"column":9},"end":{"line":43,"column":9}}]},"7":{"line":46,"type":"if","locations":[{"start":{"line":46,"column":9},"end":{"line":46,"column":9}},{"start":{"line":46,"column":9},"end":{"line":46,"column":9}}]},"8":{"line":49,"type":"if","locations":[{"start":{"line":49,"column":9},"end":{"line":49,"column":9}},{"start":{"line":49,"column":9},"end":{"line":49,"column":9}}]},"9":{"line":52,"type":"if","locations":[{"start":{"line":52,"column":9},"end":{"line":52,"column":9}},{"start":{"line":52,"column":9},"end":{"line":52,"column":9}}]},"10":{"line":56,"type":"if","locations":[{"start":{"line":56,"column":9},"end":{"line":56,"column":9}},{"start":{"line":56,"column":9},"end":{"line":56,"column":9}}]},"11":{"line":60,"type":"if","locations":[{"start":{"line":60,"column":9},"end":{"line":60,"column":9}},{"start":{"line":60,"column":9},"end":{"line":60,"column":9}}]},"12":{"line":68,"type":"if","locations":[{"start":{"line":68,"column":9},"end":{"line":68,"column":9}},{"start":{"line":68,"column":9},"end":{"line":68,"column":9}}]},"13":{"line":78,"type":"if","locations":[{"start":{"line":78,"column":6},"end":{"line":78,"column":6}},{"start":{"line":78,"column":6},"end":{"line":78,"column":6}}]},"14":{"line":89,"type":"binary-expr","locations":[{"start":{"line":89,"column":10},"end":{"line":89,"column":25}},{"start":{"line":90,"column":10},"end":{"line":90,"column":24}},{"start":{"line":91,"column":10},"end":{"line":91,"column":44}}]},"15":{"line":96,"type":"if","locations":[{"start":{"line":96,"column":8},"end":{"line":96,"column":8}},{"start":{"line":96,"column":8},"end":{"line":96,"column":8}}]},"16":{"line":97,"type":"if","locations":[{"start":{"line":97,"column":10},"end":{"line":97,"column":10}},{"start":{"line":97,"column":10},"end":{"line":97,"column":10}}]},"17":{"line":120,"type":"if","locations":[{"start":{"line":120,"column":2},"end":{"line":120,"column":2}},{"start":{"line":120,"column":2},"end":{"line":120,"column":2}}]},"18":{"line":120,"type":"binary-expr","locations":[{"start":{"line":120,"column":6},"end":{"line":120,"column":32}},{"start":{"line":120,"column":36},"end":{"line":120,"column":60}}]},"19":{"line":121,"type":"if","locations":[{"start":{"line":121,"column":4},"end":{"line":121,"column":4}},{"start":{"line":121,"column":4},"end":{"line":121,"column":4}}]},"20":{"line":123,"type":"cond-expr","locations":[{"start":{"line":123,"column":34},"end":{"line":123,"column":40}},{"start":{"line":123,"column":43},"end":{"line":123,"column":54}}]},"21":{"line":124,"type":"if","locations":[{"start":{"line":124,"column":6},"end":{"line":124,"column":6}},{"start":{"line":124,"column":6},"end":{"line":124,"column":6}}]},"22":{"line":136,"type":"if","locations":[{"start":{"line":136,"column":6},"end":{"line":136,"column":6}},{"start":{"line":136,"column":6},"end":{"line":136,"column":6}}]},"23":{"line":138,"type":"if","locations":[{"start":{"line":138,"column":6},"end":{"line":138,"column":6}},{"start":{"line":138,"column":6},"end":{"line":138,"column":6}}]}}}} \ No newline at end of file +{"/Users/agiammarchi/git/domdiff/cjs/index.js":{"path":"/Users/agiammarchi/git/domdiff/cjs/index.js","s":{"1":1,"2":847,"3":1,"4":531,"5":1,"6":25,"7":1,"8":24,"9":24,"10":24,"11":24,"12":1,"13":107,"14":54,"15":107,"16":107,"17":107,"18":107,"19":107,"20":107,"21":107,"22":107,"23":107,"24":107,"25":107,"26":424,"27":38,"28":386,"29":3,"30":383,"31":22,"32":361,"33":5,"34":356,"35":135,"36":135,"37":221,"38":52,"39":52,"40":169,"41":55,"42":55,"43":55,"44":114,"45":21,"46":21,"47":21,"48":93,"49":93,"50":55,"51":55,"52":38,"53":38,"54":38,"55":58,"56":58,"57":38,"58":13,"59":11,"60":2,"61":13,"62":13,"63":13,"64":13,"65":25,"66":25,"67":25,"68":25,"69":107,"70":86,"71":36,"72":36,"73":36,"74":13,"75":23,"76":23,"77":66,"78":23,"79":50,"80":2,"81":50,"82":27,"83":23,"84":107,"85":1},"b":{"1":[1,24],"2":[54,53],"3":[107,106],"4":[107,105],"5":[56,51],"6":[531,474],"7":[38,386],"8":[3,383],"9":[22,361],"10":[5,356],"11":[135,221],"12":[52,169],"13":[55,114],"14":[21,93],"15":[55,38],"16":[96,88,85],"17":[13,25],"18":[11,2],"19":[86,21],"20":[107,57],"21":[36,50],"22":[27,9],"23":[13,23],"24":[2,48],"25":[27,23]},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":10,"column":0},"end":{"line":10,"column":30}},"2":{"start":{"line":10,"column":23},"end":{"line":10,"column":29}},"3":{"start":{"line":12,"column":0},"end":{"line":12,"column":24}},"4":{"start":{"line":12,"column":22},"end":{"line":12,"column":23}},"5":{"start":{"line":14,"column":0},"end":{"line":23,"column":2}},"6":{"start":{"line":15,"column":2},"end":{"line":22,"column":3}},"7":{"start":{"line":16,"column":4},"end":{"line":16,"column":44}},"8":{"start":{"line":18,"column":4},"end":{"line":18,"column":57}},"9":{"start":{"line":19,"column":4},"end":{"line":19,"column":42}},"10":{"start":{"line":20,"column":4},"end":{"line":20,"column":38}},"11":{"start":{"line":21,"column":4},"end":{"line":21,"column":27}},"12":{"start":{"line":25,"column":0},"end":{"line":159,"column":2}},"13":{"start":{"line":34,"column":2},"end":{"line":35,"column":17}},"14":{"start":{"line":35,"column":4},"end":{"line":35,"column":17}},"15":{"start":{"line":36,"column":2},"end":{"line":36,"column":42}},"16":{"start":{"line":37,"column":2},"end":{"line":37,"column":39}},"17":{"start":{"line":38,"column":2},"end":{"line":38,"column":72}},"18":{"start":{"line":39,"column":2},"end":{"line":39,"column":40}},"19":{"start":{"line":40,"column":2},"end":{"line":40,"column":43}},"20":{"start":{"line":41,"column":2},"end":{"line":41,"column":41}},"21":{"start":{"line":42,"column":2},"end":{"line":42,"column":48}},"22":{"start":{"line":43,"column":2},"end":{"line":43,"column":41}},"23":{"start":{"line":44,"column":2},"end":{"line":44,"column":39}},"24":{"start":{"line":45,"column":2},"end":{"line":45,"column":45}},"25":{"start":{"line":46,"column":2},"end":{"line":126,"column":3}},"26":{"start":{"line":47,"column":4},"end":{"line":125,"column":5}},"27":{"start":{"line":48,"column":6},"end":{"line":48,"column":54}},"28":{"start":{"line":50,"column":9},"end":{"line":125,"column":5}},"29":{"start":{"line":51,"column":6},"end":{"line":51,"column":50}},"30":{"start":{"line":53,"column":9},"end":{"line":125,"column":5}},"31":{"start":{"line":54,"column":6},"end":{"line":54,"column":51}},"32":{"start":{"line":56,"column":9},"end":{"line":125,"column":5}},"33":{"start":{"line":57,"column":6},"end":{"line":57,"column":47}},"34":{"start":{"line":59,"column":9},"end":{"line":125,"column":5}},"35":{"start":{"line":60,"column":6},"end":{"line":60,"column":54}},"36":{"start":{"line":61,"column":6},"end":{"line":61,"column":51}},"37":{"start":{"line":63,"column":9},"end":{"line":125,"column":5}},"38":{"start":{"line":64,"column":6},"end":{"line":64,"column":50}},"39":{"start":{"line":65,"column":6},"end":{"line":65,"column":47}},"40":{"start":{"line":67,"column":9},"end":{"line":125,"column":5}},"41":{"start":{"line":68,"column":6},"end":{"line":71,"column":8}},"42":{"start":{"line":72,"column":6},"end":{"line":72,"column":54}},"43":{"start":{"line":73,"column":6},"end":{"line":73,"column":47}},"44":{"start":{"line":75,"column":9},"end":{"line":125,"column":5}},"45":{"start":{"line":76,"column":6},"end":{"line":79,"column":8}},"46":{"start":{"line":80,"column":6},"end":{"line":80,"column":50}},"47":{"start":{"line":81,"column":6},"end":{"line":81,"column":51}},"48":{"start":{"line":84,"column":6},"end":{"line":84,"column":56}},"49":{"start":{"line":85,"column":6},"end":{"line":124,"column":7}},"50":{"start":{"line":86,"column":8},"end":{"line":89,"column":10}},"51":{"start":{"line":90,"column":8},"end":{"line":90,"column":53}},"52":{"start":{"line":93,"column":8},"end":{"line":93,"column":22}},"53":{"start":{"line":94,"column":8},"end":{"line":94,"column":28}},"54":{"start":{"line":95,"column":8},"end":{"line":102,"column":9}},"55":{"start":{"line":100,"column":10},"end":{"line":100,"column":14}},"56":{"start":{"line":101,"column":10},"end":{"line":101,"column":14}},"57":{"start":{"line":103,"column":8},"end":{"line":123,"column":9}},"58":{"start":{"line":104,"column":10},"end":{"line":113,"column":11}},"59":{"start":{"line":105,"column":12},"end":{"line":105,"column":62}},"60":{"start":{"line":107,"column":12},"end":{"line":112,"column":14}},"61":{"start":{"line":114,"column":10},"end":{"line":114,"column":27}},"62":{"start":{"line":115,"column":10},"end":{"line":115,"column":26}},"63":{"start":{"line":116,"column":10},"end":{"line":116,"column":45}},"64":{"start":{"line":117,"column":10},"end":{"line":117,"column":43}},"65":{"start":{"line":119,"column":10},"end":{"line":119,"column":41}},"66":{"start":{"line":120,"column":10},"end":{"line":120,"column":37}},"67":{"start":{"line":121,"column":10},"end":{"line":121,"column":72}},"68":{"start":{"line":122,"column":10},"end":{"line":122,"column":55}},"69":{"start":{"line":127,"column":2},"end":{"line":157,"column":3}},"70":{"start":{"line":128,"column":4},"end":{"line":156,"column":5}},"71":{"start":{"line":129,"column":6},"end":{"line":129,"column":45}},"72":{"start":{"line":130,"column":6},"end":{"line":130,"column":55}},"73":{"start":{"line":131,"column":6},"end":{"line":140,"column":7}},"74":{"start":{"line":132,"column":8},"end":{"line":132,"column":73}},"75":{"start":{"line":135,"column":8},"end":{"line":135,"column":75}},"76":{"start":{"line":136,"column":8},"end":{"line":138,"column":9}},"77":{"start":{"line":137,"column":10},"end":{"line":137,"column":67}},"78":{"start":{"line":139,"column":8},"end":{"line":139,"column":49}},"79":{"start":{"line":143,"column":6},"end":{"line":144,"column":23}},"80":{"start":{"line":144,"column":8},"end":{"line":144,"column":23}},"81":{"start":{"line":145,"column":6},"end":{"line":155,"column":7}},"82":{"start":{"line":146,"column":8},"end":{"line":146,"column":68}},"83":{"start":{"line":149,"column":8},"end":{"line":154,"column":10}},"84":{"start":{"line":158,"column":2},"end":{"line":158,"column":21}},"85":{"start":{"line":161,"column":0},"end":{"line":161,"column":78}}},"branchMap":{"1":{"line":15,"type":"if","locations":[{"start":{"line":15,"column":2},"end":{"line":15,"column":2}},{"start":{"line":15,"column":2},"end":{"line":15,"column":2}}]},"2":{"line":34,"type":"if","locations":[{"start":{"line":34,"column":2},"end":{"line":34,"column":2}},{"start":{"line":34,"column":2},"end":{"line":34,"column":2}}]},"3":{"line":36,"type":"binary-expr","locations":[{"start":{"line":36,"column":18},"end":{"line":36,"column":33}},{"start":{"line":36,"column":37},"end":{"line":36,"column":41}}]},"4":{"line":37,"type":"binary-expr","locations":[{"start":{"line":37,"column":14},"end":{"line":37,"column":26}},{"start":{"line":37,"column":30},"end":{"line":37,"column":38}}]},"5":{"line":38,"type":"cond-expr","locations":[{"start":{"line":38,"column":42},"end":{"line":38,"column":46}},{"start":{"line":38,"column":49},"end":{"line":38,"column":71}}]},"6":{"line":46,"type":"binary-expr","locations":[{"start":{"line":46,"column":9},"end":{"line":46,"column":35}},{"start":{"line":46,"column":39},"end":{"line":46,"column":63}}]},"7":{"line":47,"type":"if","locations":[{"start":{"line":47,"column":4},"end":{"line":47,"column":4}},{"start":{"line":47,"column":4},"end":{"line":47,"column":4}}]},"8":{"line":50,"type":"if","locations":[{"start":{"line":50,"column":9},"end":{"line":50,"column":9}},{"start":{"line":50,"column":9},"end":{"line":50,"column":9}}]},"9":{"line":53,"type":"if","locations":[{"start":{"line":53,"column":9},"end":{"line":53,"column":9}},{"start":{"line":53,"column":9},"end":{"line":53,"column":9}}]},"10":{"line":56,"type":"if","locations":[{"start":{"line":56,"column":9},"end":{"line":56,"column":9}},{"start":{"line":56,"column":9},"end":{"line":56,"column":9}}]},"11":{"line":59,"type":"if","locations":[{"start":{"line":59,"column":9},"end":{"line":59,"column":9}},{"start":{"line":59,"column":9},"end":{"line":59,"column":9}}]},"12":{"line":63,"type":"if","locations":[{"start":{"line":63,"column":9},"end":{"line":63,"column":9}},{"start":{"line":63,"column":9},"end":{"line":63,"column":9}}]},"13":{"line":67,"type":"if","locations":[{"start":{"line":67,"column":9},"end":{"line":67,"column":9}},{"start":{"line":67,"column":9},"end":{"line":67,"column":9}}]},"14":{"line":75,"type":"if","locations":[{"start":{"line":75,"column":9},"end":{"line":75,"column":9}},{"start":{"line":75,"column":9},"end":{"line":75,"column":9}}]},"15":{"line":85,"type":"if","locations":[{"start":{"line":85,"column":6},"end":{"line":85,"column":6}},{"start":{"line":85,"column":6},"end":{"line":85,"column":6}}]},"16":{"line":96,"type":"binary-expr","locations":[{"start":{"line":96,"column":10},"end":{"line":96,"column":25}},{"start":{"line":97,"column":10},"end":{"line":97,"column":24}},{"start":{"line":98,"column":10},"end":{"line":98,"column":44}}]},"17":{"line":103,"type":"if","locations":[{"start":{"line":103,"column":8},"end":{"line":103,"column":8}},{"start":{"line":103,"column":8},"end":{"line":103,"column":8}}]},"18":{"line":104,"type":"if","locations":[{"start":{"line":104,"column":10},"end":{"line":104,"column":10}},{"start":{"line":104,"column":10},"end":{"line":104,"column":10}}]},"19":{"line":127,"type":"if","locations":[{"start":{"line":127,"column":2},"end":{"line":127,"column":2}},{"start":{"line":127,"column":2},"end":{"line":127,"column":2}}]},"20":{"line":127,"type":"binary-expr","locations":[{"start":{"line":127,"column":6},"end":{"line":127,"column":32}},{"start":{"line":127,"column":36},"end":{"line":127,"column":60}}]},"21":{"line":128,"type":"if","locations":[{"start":{"line":128,"column":4},"end":{"line":128,"column":4}},{"start":{"line":128,"column":4},"end":{"line":128,"column":4}}]},"22":{"line":130,"type":"cond-expr","locations":[{"start":{"line":130,"column":34},"end":{"line":130,"column":40}},{"start":{"line":130,"column":43},"end":{"line":130,"column":54}}]},"23":{"line":131,"type":"if","locations":[{"start":{"line":131,"column":6},"end":{"line":131,"column":6}},{"start":{"line":131,"column":6},"end":{"line":131,"column":6}}]},"24":{"line":143,"type":"if","locations":[{"start":{"line":143,"column":6},"end":{"line":143,"column":6}},{"start":{"line":143,"column":6},"end":{"line":143,"column":6}}]},"25":{"line":145,"type":"if","locations":[{"start":{"line":145,"column":6},"end":{"line":145,"column":6}},{"start":{"line":145,"column":6},"end":{"line":145,"column":6}}]}}}} \ No newline at end of file diff --git a/coverage/lcov-report/cjs/index.html b/coverage/lcov-report/cjs/index.html index 5949b5a..3064f91 100644 --- a/coverage/lcov-report/cjs/index.html +++ b/coverage/lcov-report/cjs/index.html @@ -22,12 +22,12 @@

100% Statements - 80/80 + 85/85
100% Branches - 47/47 + 51/51
100% @@ -37,7 +37,7 @@

100% Lines - 79/79 + 83/83

@@ -62,13 +62,13 @@

index.js
100% - 80/80 + 85/85 100% - 47/47 + 51/51 100% 0/0 100% - 79/79 + 83/83 @@ -77,7 +77,7 @@

diff --git a/coverage/lcov-report/cjs/index.js.html b/coverage/lcov-report/cjs/index.js.html index 9fd4566..d065cff 100644 --- a/coverage/lcov-report/cjs/index.js.html +++ b/coverage/lcov-report/cjs/index.js.html @@ -22,12 +22,12 @@

100% Statements - 80/80 + 85/85
100% Branches - 47/47 + 51/51
100% @@ -37,7 +37,7 @@

100% Lines - 79/79 + 83/83

@@ -197,7 +197,14 @@

152 153 154 -155  +155 +156 +157 +158 +159 +160 +161 +162        @@ -206,6 +213,8 @@

      +847× +  531×   @@ -226,6 +235,11 @@

      +  +  +107× +54× +107× 107× 107× 107× @@ -360,6 +374,8 @@

* @credits https://github.com/snabbdom/snabbdom */   +const eqeq = (a, b) => a == b; +  const identity = O => O;   const remove = (get, parentNode, before, after) => { @@ -377,11 +393,16 @@

parentNode, // where changes happen currentNodes, // Array of current items/nodes futureNodes, // Array of future items/nodes - getNode, // optional way to retrieve a node from an item - beforeNode // optional item/node to use as insertBefore delimiter + options // optional object with one of the following properties + // before: domNode + // compare(generic, generic) => true if same generic + // node(generic) => Node ) => { - const get = getNode || identity; - const before = beforeNode == null ? null : get(beforeNode, 0); + if (!options) + options = {}; + const compare = options.compare || eqeq; + const get = options.node || identity; + const before = options.before == null ? null : get(options.before, 0); let currentStart = 0, futureStart = 0; let currentEnd = currentNodes.length - 1; let currentStartNode = currentNodes[0]; @@ -402,15 +423,15 @@

else if (futureEndNode == null) { futureEndNode = futureNodes[--futureEnd]; } - else if (currentStartNode == futureStartNode) { + else if (compare(currentStartNode, futureStartNode)) { currentStartNode = currentNodes[++currentStart]; futureStartNode = futureNodes[++futureStart]; } - else if (currentEndNode == futureEndNode) { + else if (compare(currentEndNode, futureEndNode)) { currentEndNode = currentNodes[--currentEnd]; futureEndNode = futureNodes[--futureEnd]; } - else if (currentStartNode == futureEndNode) { + else if (compare(currentStartNode, futureEndNode)) { parentNode.insertBefore( get(currentStartNode, 1), get(currentEndNode, -0).nextSibling @@ -418,7 +439,7 @@

currentStartNode = currentNodes[++currentStart]; futureEndNode = futureNodes[--futureEnd]; } - else if (currentEndNode == futureStartNode) { + else if (compare(currentEndNode, futureStartNode)) { parentNode.insertBefore( get(currentEndNode, 1), get(currentStartNode, 0) @@ -511,7 +532,7 @@

diff --git a/coverage/lcov-report/index.html b/coverage/lcov-report/index.html index 41ab133..08653c1 100644 --- a/coverage/lcov-report/index.html +++ b/coverage/lcov-report/index.html @@ -22,12 +22,12 @@

100% Statements - 80/80 + 85/85
100% Branches - 47/47 + 51/51
100% @@ -37,7 +37,7 @@

100% Lines - 79/79 + 83/83

@@ -62,13 +62,13 @@

cjs/
100% - 80/80 + 85/85 100% - 47/47 + 51/51 100% 0/0 100% - 79/79 + 83/83 @@ -77,7 +77,7 @@

diff --git a/coverage/lcov.info b/coverage/lcov.info index 114f9a9..767c4c4 100644 --- a/coverage/lcov.info +++ b/coverage/lcov.info @@ -2,134 +2,142 @@ TN: SF:/Users/agiammarchi/git/domdiff/cjs/index.js FNF:0 FNH:0 -DA:10,531 -DA:12,1 -DA:13,25 +DA:10,847 +DA:12,531 DA:14,1 -DA:16,24 -DA:17,24 +DA:15,25 +DA:16,1 DA:18,24 DA:19,24 -DA:23,1 -DA:30,107 -DA:31,107 -DA:32,107 -DA:33,107 +DA:20,24 +DA:21,24 +DA:25,1 DA:34,107 -DA:35,107 +DA:35,54 DA:36,107 DA:37,107 DA:38,107 DA:39,107 -DA:40,424 -DA:41,38 -DA:43,386 -DA:44,3 -DA:46,383 -DA:47,22 -DA:49,361 -DA:50,5 -DA:52,356 -DA:53,135 -DA:54,135 -DA:56,221 -DA:57,52 -DA:58,52 -DA:60,169 -DA:61,55 -DA:65,55 -DA:66,55 -DA:68,114 -DA:69,21 -DA:73,21 -DA:74,21 -DA:77,93 -DA:78,93 -DA:79,55 -DA:83,55 -DA:86,38 -DA:87,38 -DA:88,38 -DA:93,58 -DA:94,58 -DA:96,38 -DA:97,13 -DA:98,11 -DA:100,2 -DA:107,13 -DA:108,13 -DA:109,13 -DA:110,13 -DA:112,25 -DA:113,25 -DA:114,25 -DA:115,25 -DA:120,107 -DA:121,86 -DA:122,36 -DA:123,36 -DA:124,36 -DA:125,13 -DA:128,23 -DA:129,23 -DA:130,66 -DA:132,23 -DA:136,50 -DA:137,2 -DA:138,50 -DA:139,27 -DA:142,23 -DA:151,107 -DA:154,1 -LF:79 -LH:79 -BRDA:13,1,0,1 -BRDA:13,1,1,24 -BRDA:30,2,0,107 -BRDA:30,2,1,105 -BRDA:31,3,0,56 -BRDA:31,3,1,51 -BRDA:39,4,0,531 -BRDA:39,4,1,474 -BRDA:40,5,0,38 -BRDA:40,5,1,386 -BRDA:43,6,0,3 -BRDA:43,6,1,383 -BRDA:46,7,0,22 -BRDA:46,7,1,361 -BRDA:49,8,0,5 -BRDA:49,8,1,356 -BRDA:52,9,0,135 -BRDA:52,9,1,221 -BRDA:56,10,0,52 -BRDA:56,10,1,169 -BRDA:60,11,0,55 -BRDA:60,11,1,114 -BRDA:68,12,0,21 -BRDA:68,12,1,93 -BRDA:78,13,0,55 -BRDA:78,13,1,38 -BRDA:89,14,0,96 -BRDA:89,14,1,88 -BRDA:89,14,2,85 -BRDA:96,15,0,13 -BRDA:96,15,1,25 -BRDA:97,16,0,11 -BRDA:97,16,1,2 -BRDA:120,17,0,86 -BRDA:120,17,1,21 -BRDA:120,18,0,107 -BRDA:120,18,1,57 -BRDA:121,19,0,36 -BRDA:121,19,1,50 -BRDA:123,20,0,27 -BRDA:123,20,1,9 -BRDA:124,21,0,13 -BRDA:124,21,1,23 -BRDA:136,22,0,2 -BRDA:136,22,1,48 -BRDA:138,23,0,27 -BRDA:138,23,1,23 -BRF:47 -BRH:47 +DA:40,107 +DA:41,107 +DA:42,107 +DA:43,107 +DA:44,107 +DA:45,107 +DA:46,107 +DA:47,424 +DA:48,38 +DA:50,386 +DA:51,3 +DA:53,383 +DA:54,22 +DA:56,361 +DA:57,5 +DA:59,356 +DA:60,135 +DA:61,135 +DA:63,221 +DA:64,52 +DA:65,52 +DA:67,169 +DA:68,55 +DA:72,55 +DA:73,55 +DA:75,114 +DA:76,21 +DA:80,21 +DA:81,21 +DA:84,93 +DA:85,93 +DA:86,55 +DA:90,55 +DA:93,38 +DA:94,38 +DA:95,38 +DA:100,58 +DA:101,58 +DA:103,38 +DA:104,13 +DA:105,11 +DA:107,2 +DA:114,13 +DA:115,13 +DA:116,13 +DA:117,13 +DA:119,25 +DA:120,25 +DA:121,25 +DA:122,25 +DA:127,107 +DA:128,86 +DA:129,36 +DA:130,36 +DA:131,36 +DA:132,13 +DA:135,23 +DA:136,23 +DA:137,66 +DA:139,23 +DA:143,50 +DA:144,2 +DA:145,50 +DA:146,27 +DA:149,23 +DA:158,107 +DA:161,1 +LF:83 +LH:83 +BRDA:15,1,0,1 +BRDA:15,1,1,24 +BRDA:34,2,0,54 +BRDA:34,2,1,53 +BRDA:36,3,0,107 +BRDA:36,3,1,106 +BRDA:37,4,0,107 +BRDA:37,4,1,105 +BRDA:38,5,0,56 +BRDA:38,5,1,51 +BRDA:46,6,0,531 +BRDA:46,6,1,474 +BRDA:47,7,0,38 +BRDA:47,7,1,386 +BRDA:50,8,0,3 +BRDA:50,8,1,383 +BRDA:53,9,0,22 +BRDA:53,9,1,361 +BRDA:56,10,0,5 +BRDA:56,10,1,356 +BRDA:59,11,0,135 +BRDA:59,11,1,221 +BRDA:63,12,0,52 +BRDA:63,12,1,169 +BRDA:67,13,0,55 +BRDA:67,13,1,114 +BRDA:75,14,0,21 +BRDA:75,14,1,93 +BRDA:85,15,0,55 +BRDA:85,15,1,38 +BRDA:96,16,0,96 +BRDA:96,16,1,88 +BRDA:96,16,2,85 +BRDA:103,17,0,13 +BRDA:103,17,1,25 +BRDA:104,18,0,11 +BRDA:104,18,1,2 +BRDA:127,19,0,86 +BRDA:127,19,1,21 +BRDA:127,20,0,107 +BRDA:127,20,1,57 +BRDA:128,21,0,36 +BRDA:128,21,1,50 +BRDA:130,22,0,27 +BRDA:130,22,1,9 +BRDA:131,23,0,13 +BRDA:131,23,1,23 +BRDA:143,24,0,2 +BRDA:143,24,1,48 +BRDA:145,25,0,27 +BRDA:145,25,1,23 +BRF:51 +BRH:51 end_of_record diff --git a/esm/index.js b/esm/index.js index c4b9f6e..6c221b6 100644 --- a/esm/index.js +++ b/esm/index.js @@ -6,6 +6,8 @@ * @credits https://github.com/snabbdom/snabbdom */ +const eqeq = (a, b) => a == b; + const identity = O => O; const remove = (get, parentNode, before, after) => { @@ -23,11 +25,16 @@ const domdiff = ( parentNode, // where changes happen currentNodes, // Array of current items/nodes futureNodes, // Array of future items/nodes - getNode, // optional way to retrieve a node from an item - beforeNode // optional item/node to use as insertBefore delimiter + options // optional object with one of the following properties + // before: domNode + // compare(generic, generic) => true if same generic + // node(generic) => Node ) => { - const get = getNode || identity; - const before = beforeNode == null ? null : get(beforeNode, 0); + if (!options) + options = {}; + const compare = options.compare || eqeq; + const get = options.node || identity; + const before = options.before == null ? null : get(options.before, 0); let currentStart = 0, futureStart = 0; let currentEnd = currentNodes.length - 1; let currentStartNode = currentNodes[0]; @@ -48,15 +55,15 @@ const domdiff = ( else if (futureEndNode == null) { futureEndNode = futureNodes[--futureEnd]; } - else if (currentStartNode == futureStartNode) { + else if (compare(currentStartNode, futureStartNode)) { currentStartNode = currentNodes[++currentStart]; futureStartNode = futureNodes[++futureStart]; } - else if (currentEndNode == futureEndNode) { + else if (compare(currentEndNode, futureEndNode)) { currentEndNode = currentNodes[--currentEnd]; futureEndNode = futureNodes[--futureEnd]; } - else if (currentStartNode == futureEndNode) { + else if (compare(currentStartNode, futureEndNode)) { parentNode.insertBefore( get(currentStartNode, 1), get(currentEndNode, -0).nextSibling @@ -64,7 +71,7 @@ const domdiff = ( currentStartNode = currentNodes[++currentStart]; futureEndNode = futureNodes[--futureEnd]; } - else if (currentEndNode == futureStartNode) { + else if (compare(currentEndNode, futureStartNode)) { parentNode.insertBefore( get(currentEndNode, 1), get(currentStartNode, 0) diff --git a/index.js b/index.js index e876d6b..1ef2874 100644 --- a/index.js +++ b/index.js @@ -9,6 +9,10 @@ var domdiff = (function () { * @credits https://github.com/snabbdom/snabbdom */ +var eqeq = function eqeq(a, b) { + return a == b; +}; + var identity = function identity(O) { return O; }; @@ -27,11 +31,15 @@ var remove = function remove(get, parentNode, before, after) { var domdiff = function domdiff(parentNode, // where changes happen currentNodes, // Array of current items/nodes futureNodes, // Array of future items/nodes -getNode, // optional way to retrieve a node from an item -beforeNode // optional item/node to use as insertBefore delimiter +options // optional object with one of the following properties +// before: domNode +// compare(generic, generic) => true if same generic +// node(generic) => Node ) { - var get = getNode || identity; - var before = beforeNode == null ? null : get(beforeNode, 0); + if (!options) options = {}; + var compare = options.compare || eqeq; + var get = options.node || identity; + var before = options.before == null ? null : get(options.before, 0); var currentStart = 0, futureStart = 0; var currentEnd = currentNodes.length - 1; @@ -49,17 +57,17 @@ beforeNode // optional item/node to use as insertBefore delimiter futureStartNode = futureNodes[++futureStart]; } else if (futureEndNode == null) { futureEndNode = futureNodes[--futureEnd]; - } else if (currentStartNode == futureStartNode) { + } else if (compare(currentStartNode, futureStartNode)) { currentStartNode = currentNodes[++currentStart]; futureStartNode = futureNodes[++futureStart]; - } else if (currentEndNode == futureEndNode) { + } else if (compare(currentEndNode, futureEndNode)) { currentEndNode = currentNodes[--currentEnd]; futureEndNode = futureNodes[--futureEnd]; - } else if (currentStartNode == futureEndNode) { + } else if (compare(currentStartNode, futureEndNode)) { parentNode.insertBefore(get(currentStartNode, 1), get(currentEndNode, -0).nextSibling); currentStartNode = currentNodes[++currentStart]; futureEndNode = futureNodes[--futureEnd]; - } else if (currentEndNode == futureStartNode) { + } else if (compare(currentEndNode, futureStartNode)) { parentNode.insertBefore(get(currentEndNode, 1), get(currentStartNode, 0)); currentEndNode = currentNodes[--currentEnd]; futureStartNode = futureNodes[++futureStart]; diff --git a/min.js b/min.js index 3018816..ad17564 100644 --- a/min.js +++ b/min.js @@ -1,2 +1,2 @@ var domdiff=function(){"use strict";/*! (c) 2017 Andrea Giammarchi (ISC) */ -var e=function(e){return e},n=function(e,n,r,l){if(null==l)n.removeChild(e(r,-1));else{var i=n.ownerDocument.createRange();i.setStartBefore(e(r,-1)),i.setEndAfter(e(l,-1)),i.deleteContents()}};return function(r,l,i,f,t){for(var o=f||e,s=null==t?null:o(t,0),u=0,a=0,v=l.length-1,c=l[0],d=l[v],m=i.length-1,B=i[0],h=i[m];u<=v&&a<=m;)if(null==c)c=l[++u];else if(null==d)d=l[--v];else if(null==B)B=i[++a];else if(null==h)h=i[--m];else if(c==B)c=l[++u],B=i[++a];else if(d==h)d=l[--v],h=i[--m];else if(c==h)r.insertBefore(o(c,1),o(d,-0).nextSibling),c=l[++u],h=i[--m];else if(d==B)r.insertBefore(o(d,1),o(c,0)),d=l[--v],B=i[++a];else{var g=l.indexOf(B);if(g<0)r.insertBefore(o(B,1),o(c,0)),B=i[++a];else{for(var C=g,D=a;C<=v&&D<=m&&l[C]===i[D];)C++,D++;if(1v){var w=i[m+1],x=null==w?s:o(w,0);if(a===m)r.insertBefore(o(i[a],1),x);else{for(var S=r.ownerDocument.createDocumentFragment();a<=m;)S.appendChild(o(i[a++],1));r.insertBefore(S,x)}}else null==l[u]&&u++,u===v?r.removeChild(o(l[u],-1)):n(o,r,l[u],l[v]);return i}}(); \ No newline at end of file +var e=function(e,n){return e==n},n=function(e){return e},r=function(e,n,r,l){if(null==l)n.removeChild(e(r,-1));else{var f=n.ownerDocument.createRange();f.setStartBefore(e(r,-1)),f.setEndAfter(e(l,-1)),f.deleteContents()}};return function(l,f,i,t){t||(t={});for(var o=t.compare||e,s=t.node||n,u=null==t.before?null:s(t.before,0),a=0,c=0,v=f.length-1,d=f[0],m=f[v],B=i.length-1,h=i[0],g=i[B];a<=v&&c<=B;)if(null==d)d=f[++a];else if(null==m)m=f[--v];else if(null==h)h=i[++c];else if(null==g)g=i[--B];else if(o(d,h))d=f[++a],h=i[++c];else if(o(m,g))m=f[--v],g=i[--B];else if(o(d,g))l.insertBefore(s(d,1),s(m,-0).nextSibling),d=f[++a],g=i[--B];else if(o(m,h))l.insertBefore(s(m,1),s(d,0)),m=f[--v],h=i[++c];else{var C=f.indexOf(h);if(C<0)l.insertBefore(s(h,1),s(d,0)),h=i[++c];else{for(var b=C,p=c;b<=v&&p<=B&&f[b]===i[p];)b++,p++;if(1v){var w=i[B+1],x=null==w?u:s(w,0);if(c===B)l.insertBefore(s(i[c],1),x);else{for(var S=l.ownerDocument.createDocumentFragment();c<=B;)S.appendChild(s(i[c++],1));l.insertBefore(S,x)}}else null==f[a]&&a++,a===v?l.removeChild(s(f[a],-1)):r(s,l,f[a],f[v]);return i}}(); \ No newline at end of file diff --git a/test/test.js b/test/test.js index 4e6563e..d890f5c 100644 --- a/test/test.js +++ b/test/test.js @@ -107,7 +107,7 @@ newState = domdiff( nodes.g, nodes.h, nodes.i, nodes.j, nodes.k ], - Object + {node: Object, compare: (a, b) => a === b} ); compare(newState, 'abcdefghijk'); @@ -117,7 +117,7 @@ newState = domdiff( [ nodes.g, nodes.h, nodes.i ], - Object + {node: Object} ); compare(newState, 'ghi'); @@ -135,8 +135,7 @@ newState = domdiff( [ nodes.c, nodes.d, nodes.e ], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'cde'); @@ -146,8 +145,7 @@ newState = domdiff( [ null, nodes.c, nodes.d, nodes.e, null ], - null, - nodes.k + {before: nodes.k} ); compare(newState.filter(notNull), 'cde'); @@ -157,8 +155,7 @@ newState = domdiff( [ nodes.a, nodes.c, null, nodes.e, nodes.f ], - null, - nodes.k + {before: nodes.k} ); compare(newState.filter(notNull), 'acef'); @@ -170,8 +167,7 @@ newState = domdiff( nodes.c, nodes.d, nodes.e, nodes.g, nodes.h, nodes.i ], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'cdeghi'); @@ -183,8 +179,7 @@ newState = domdiff( nodes.d, nodes.e, nodes.f, nodes.g, nodes.h, nodes.i ], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'abcdefghi'); @@ -196,8 +191,7 @@ newState = domdiff( nodes.d, nodes.e, nodes.f, nodes.g, nodes.i, nodes.h ], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'bacdefgih'); @@ -205,8 +199,7 @@ newState = domdiff( document.body, newState, [], - null, - nodes.k + {before: nodes.k} ); compare(newState, ''); @@ -216,8 +209,7 @@ newState = domdiff( document.body, newState, [nodes.a], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'a'); @@ -225,8 +217,7 @@ newState = domdiff( document.body, newState, [nodes.a, nodes.b, nodes.c], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'abc'); @@ -234,8 +225,7 @@ newState = domdiff( document.body, newState, [nodes.d, nodes.e], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'de'); @@ -243,8 +233,7 @@ newState = domdiff( document.body, newState, [nodes.a, nodes.b, nodes.c, nodes.d, nodes.e], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'abcde'); @@ -252,8 +241,7 @@ newState = domdiff( document.body, newState, [nodes.a, nodes.b, nodes.d, nodes.e], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'abde'); @@ -261,8 +249,7 @@ newState = domdiff( document.body, newState, [nodes.a, nodes.b, nodes.c, nodes.d, nodes.e], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'abcde'); @@ -270,8 +257,7 @@ newState = domdiff( document.body, newState, [nodes.b, nodes.c, nodes.d], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'bcd'); @@ -279,8 +265,7 @@ newState = domdiff( document.body, newState, [nodes.a, nodes.b, nodes.c, nodes.d, nodes.e], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'abcde'); @@ -288,8 +273,7 @@ newState = domdiff( document.body, newState, [], - null, - nodes.k + {before: nodes.k} ); compare(newState, ''); @@ -297,8 +281,7 @@ newState = domdiff( document.body, newState, [nodes.a, nodes.b, nodes.c], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'abc'); @@ -306,8 +289,7 @@ newState = domdiff( document.body, newState, [nodes.a, document.createTextNode('b'), nodes.c], - null, - nodes.k + {before: nodes.k} ); assert( newState[1] !== nodes.b && @@ -323,8 +305,7 @@ newState = domdiff( document.body, newState, [nodes.a, nodes.b, nodes.c, nodes.d, nodes.e], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'abcde'); @@ -332,8 +313,7 @@ newState = domdiff( document.body, newState, [nodes.c, nodes.d, nodes.e], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'cde'); @@ -341,8 +321,7 @@ newState = domdiff( document.body, newState, [nodes.a, nodes.b, nodes.c, nodes.d, nodes.e], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'abcde'); @@ -350,8 +329,7 @@ newState = domdiff( document.body, newState, [nodes.a, nodes.b, nodes.c], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'abc'); @@ -359,8 +337,7 @@ newState = domdiff( document.body, newState, [nodes.a, nodes.b, nodes.c, nodes.d, nodes.e], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'abcde'); @@ -368,8 +345,7 @@ newState = domdiff( document.body, newState, [nodes.a, nodes.b, nodes.d, nodes.e], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'abde'); @@ -379,8 +355,7 @@ newState = domdiff( document.body, newState, [nodes.a, nodes.b, nodes.c, nodes.d], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'abcd'); @@ -388,8 +363,7 @@ newState = domdiff( document.body, newState, [nodes.b, nodes.c, nodes.a, nodes.d], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'bcad'); @@ -397,8 +371,7 @@ newState = domdiff( document.body, newState, [nodes.a, nodes.b, nodes.c], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'abc'); @@ -406,8 +379,7 @@ newState = domdiff( document.body, newState, [nodes.b, nodes.c, nodes.a, nodes.d], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'bcad'); @@ -415,8 +387,7 @@ newState = domdiff( document.body, newState, [nodes.c, nodes.b, nodes.d], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'cbd'); @@ -424,8 +395,7 @@ newState = domdiff( document.body, newState, [nodes.a, nodes.b, nodes.c], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'abc'); @@ -433,8 +403,7 @@ newState = domdiff( document.body, newState, [nodes.b, nodes.c, nodes.a], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'bca'); @@ -442,8 +411,7 @@ newState = domdiff( document.body, newState, [nodes.a, nodes.b, nodes.c, nodes.d], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'abcd'); @@ -451,8 +419,7 @@ newState = domdiff( document.body, newState, [nodes.a, nodes.d, nodes.b, nodes.c], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'adbc'); @@ -460,8 +427,7 @@ newState = domdiff( document.body, newState, [nodes.a, nodes.d, nodes.b, nodes.c], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'adbc'); @@ -471,8 +437,7 @@ newState = domdiff( document.body, newState, [nodes.a, nodes.b, nodes.c, nodes.d, nodes.e], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'abcde'); @@ -480,8 +445,7 @@ newState = domdiff( document.body, newState, [nodes.d, nodes.a, nodes.b, nodes.c, nodes.f], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'dabcf'); @@ -489,8 +453,7 @@ newState = domdiff( document.body, newState, [nodes.a, nodes.d, nodes.e], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'ade'); @@ -498,8 +461,7 @@ newState = domdiff( document.body, newState, [nodes.d, nodes.f], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'df'); @@ -507,8 +469,7 @@ newState = domdiff( document.body, newState, [nodes.b, nodes.d, nodes.e], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'bde'); @@ -516,8 +477,7 @@ newState = domdiff( document.body, newState, [nodes.d, nodes.e, nodes.c], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'dec'); @@ -525,8 +485,7 @@ newState = domdiff( document.body, newState, [nodes.j, nodes.a, nodes.b, nodes.c], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'jabc'); @@ -534,8 +493,7 @@ newState = domdiff( document.body, newState, [nodes.d, nodes.a, nodes.b, nodes.c, nodes.j, nodes.e], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'dabcje'); @@ -543,8 +501,7 @@ newState = domdiff( document.body, newState, [nodes.a, nodes.b, nodes.c, nodes.d, nodes.e, nodes.f, nodes.g, nodes.h], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'abcdefgh'); @@ -552,8 +509,7 @@ newState = domdiff( document.body, newState, [nodes.a, nodes.b, nodes.c, nodes.d, nodes.e, nodes.f, nodes.g, nodes.h].reverse(), - null, - nodes.k + {before: nodes.k} ); compare(newState, 'hgfedcba'); @@ -561,8 +517,7 @@ newState = domdiff( document.body, newState, [nodes.a, nodes.b, nodes.c, nodes.d, nodes.e, nodes.f], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'abcdef'); @@ -570,8 +525,7 @@ newState = domdiff( document.body, newState, [nodes.e, nodes.d, nodes.c, nodes.b, nodes.f, nodes.a], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'edcbfa'); @@ -581,8 +535,7 @@ newState = domdiff( document.body, newState, [nodes.a, nodes.b, nodes.c, nodes.d, nodes.e, nodes.f], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'abcdef'); @@ -590,8 +543,7 @@ newState = domdiff( document.body, newState, [null, nodes.c, undefined, null, nodes.b, nodes.a, null, nodes.f, nodes.e, null, nodes.d, undefined], - null, - nodes.k + {before: nodes.k} ); compare(newState.filter(notNull), 'cbafed'); @@ -599,8 +551,7 @@ newState = domdiff( document.body, newState, [nodes.a, nodes.b, nodes.c, nodes.d, nodes.e, nodes.f], - null, - nodes.k + {before: nodes.k} ); compare(newState, 'abcdef'); @@ -608,8 +559,7 @@ newState = domdiff( document.body, newState, [null, null, undefined, null, null, undefined], - null, - nodes.k + {before: nodes.k} ); compare(newState.filter(notNull), ''); @@ -617,8 +567,7 @@ newState = domdiff( document.body, newState, [nodes.a, nodes.b, nodes.c, nodes.d, nodes.e, nodes.f].reverse(), - null, - nodes.k + {before: nodes.k} ); compare(newState, 'fedcba'); From dbf464dd70d06b6a68b05b3f760cbba1f78a0dd6 Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Sun, 24 Jun 2018 15:21:17 +0200 Subject: [PATCH 33/71] 1.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a1362e4..ed797c6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "domdiff", - "version": "0.4.2", + "version": "1.0.0", "description": "A fast and simple way to diff childNodes", "browser": "min.js", "main": "cjs/index.js", From c9dbe9713ccd1f513a9a221b302fa0c02fd24a34 Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Tue, 3 Jul 2018 19:18:02 +0200 Subject: [PATCH 34/71] =?UTF-8?q?using=20unpkg=20field=20=F0=9F=8E=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ed797c6..e7bc5dd 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "domdiff", "version": "1.0.0", "description": "A fast and simple way to diff childNodes", - "browser": "min.js", + "unpkg": "min.js", "main": "cjs/index.js", "module": "esm/index.js", "scripts": { From 545783beca1cabebb04c4ddf82e4786502bc37ca Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Tue, 3 Jul 2018 19:18:02 +0200 Subject: [PATCH 35/71] 1.0.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e7bc5dd..779f195 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "domdiff", - "version": "1.0.0", + "version": "1.0.1", "description": "A fast and simple way to diff childNodes", "unpkg": "min.js", "main": "cjs/index.js", From 13c05ea74ff46d02752ceace5a7f619f0e6989a3 Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Tue, 11 Sep 2018 16:18:32 +0200 Subject: [PATCH 36/71] V2 - petit-dom(ish) like diffing --- README.md | 25 +- cjs/index.js | 331 +-- cjs/utils.js | 395 ++++ coverage/coverage.json | 2 +- coverage/lcov-report/cjs/index.html | 33 +- coverage/lcov-report/cjs/index.js.html | 619 ++++-- coverage/lcov-report/cjs/utils.js.html | 1254 +++++++++++ coverage/lcov-report/index.html | 22 +- coverage/lcov.info | 489 +++-- esm/.eslintrc | 2 +- esm/index.js | 333 +-- esm/utils.js | 386 ++++ index.js | 428 +++- min.js | 3 +- package-lock.json | 2700 ++++++++++++++++++++++++ package.json | 6 +- test/benchmark.html | 144 ++ test/index.html | 2 +- test/node.js | 1 + test/test.js | 293 ++- 20 files changed, 6719 insertions(+), 749 deletions(-) create mode 100644 cjs/utils.js create mode 100644 coverage/lcov-report/cjs/utils.js.html create mode 100644 esm/utils.js create mode 100644 package-lock.json create mode 100644 test/benchmark.html diff --git a/README.md b/README.md index 80d4a5d..5482acc 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,30 @@ [![donate](https://img.shields.io/badge/$-donate-ff69b4.svg?maxAge=2592000&style=flat)](https://github.com/WebReflection/donate) [![Coverage Status](https://coveralls.io/repos/github/WebReflection/domdiff/badge.svg?branch=master)](https://coveralls.io/github/WebReflection/domdiff?branch=master) [![Build Status](https://travis-ci.org/WebReflection/domdiff.svg?branch=master)](https://travis-ci.org/WebReflection/domdiff) [![License: ISC](https://img.shields.io/badge/License-ISC-yellow.svg)](https://opensource.org/licenses/ISC) -A vDOM-less implementation of the [snabbdom](https://github.com/snabbdom/snabbdom) diffing logic. +A vDOM-less implementation of the [petit-dom](https://github.com/yelouafi/petit-dom) diffing logic. + + +### V2 breaking change + + * the good old snabdom diff logic has been 100% replaced + * lists with `null` or `undefined` nodes are not allowed anymore + +... but I guess having null nodes in the equation was quite possibly a bad idea in the first place ... + +#### V2 Diffing Strategies: + + * common prefixes + * common suffixes + * skip same lists + * add boundaries + * remove boundaries + * simple sub-sequences insertions and removals + * one to many and many to one replacements + * fast inverted list swap + * O(ND) algo with a limit of 50 attempts + * last fallback with a simplified Hunt Szymanski algorithm + +The current goal is to have in about 1K the best DOM diffing library out there. #### V1 breaking change diff --git a/cjs/index.js b/cjs/index.js index cb01ee8..59104be 100644 --- a/cjs/index.js +++ b/cjs/index.js @@ -1,26 +1,9 @@ 'use strict'; -/*! (c) 2017 Andrea Giammarchi (ISC) */ - -/** - * This code is a revisited port of the snabbdom vDOM diffing logic, - * the same that fuels as fork Vue.js or other libraries. - * @credits https://github.com/snabbdom/snabbdom - */ - -const eqeq = (a, b) => a == b; - -const identity = O => O; - -const remove = (get, parentNode, before, after) => { - if (after == null) { - parentNode.removeChild(get(before, -1)); - } else { - const range = parentNode.ownerDocument.createRange(); - range.setStartBefore(get(before, -1)); - range.setEndAfter(get(after, -1)); - range.deleteContents(); - } -}; +/*! (c) 2018 Andrea Giammarchi (ISC) */ + +const { + eqeq, identity, indexOf, isReversed, next, append, remove, smartDiff +} = require('./utils.js'); const domdiff = ( parentNode, // where changes happen @@ -33,128 +16,206 @@ const domdiff = ( ) => { if (!options) options = {}; + const compare = options.compare || eqeq; const get = options.node || identity; const before = options.before == null ? null : get(options.before, 0); - let currentStart = 0, futureStart = 0; - let currentEnd = currentNodes.length - 1; - let currentStartNode = currentNodes[0]; - let currentEndNode = currentNodes[currentEnd]; - let futureEnd = futureNodes.length - 1; - let futureStartNode = futureNodes[0]; - let futureEndNode = futureNodes[futureEnd]; - while (currentStart <= currentEnd && futureStart <= futureEnd) { - if (currentStartNode == null) { - currentStartNode = currentNodes[++currentStart]; - } - else if (currentEndNode == null) { - currentEndNode = currentNodes[--currentEnd]; - } - else if (futureStartNode == null) { - futureStartNode = futureNodes[++futureStart]; - } - else if (futureEndNode == null) { - futureEndNode = futureNodes[--futureEnd]; - } - else if (compare(currentStartNode, futureStartNode)) { - currentStartNode = currentNodes[++currentStart]; - futureStartNode = futureNodes[++futureStart]; - } - else if (compare(currentEndNode, futureEndNode)) { - currentEndNode = currentNodes[--currentEnd]; - futureEndNode = futureNodes[--futureEnd]; - } - else if (compare(currentStartNode, futureEndNode)) { - parentNode.insertBefore( - get(currentStartNode, 1), - get(currentEndNode, -0).nextSibling + + const currentLength = currentNodes.length; + let currentEnd = currentLength; + let currentStart = 0; + + let futureEnd = futureNodes.length; + let futureStart = 0; + + // common prefix + while ( + currentStart < currentEnd && + futureStart < futureEnd && + compare(currentNodes[currentStart], futureNodes[futureStart]) + ) { + currentStart++; + futureStart++; + } + + // common suffix + while ( + currentStart < currentEnd && + futureStart < futureEnd && + compare(currentNodes[currentEnd - 1], futureNodes[futureEnd - 1]) + ) { + currentEnd--; + futureEnd--; + } + + const currentSame = currentStart === currentEnd; + const futureSame = futureStart === futureEnd; + + // same list + if (currentSame && futureSame) + return futureNodes; + + // only stuff to add + if (currentSame && futureStart < futureEnd) { + append( + get, + parentNode, + futureNodes, + futureStart, + futureEnd, + next(get, currentNodes, currentStart, currentLength, before) + ); + return futureNodes; + } + + // only stuff to remove + if (futureSame && currentStart < currentEnd) { + remove( + get, + parentNode, + currentNodes, + currentStart, + currentEnd + ); + return futureNodes; + } + + const currentChanges = currentEnd - currentStart; + const futureChanges = futureEnd - futureStart; + let i = -1; + + // 2 simple indels: the shortest sequence is a subsequence of the longest + if (currentChanges < futureChanges) { + i = indexOf( + futureNodes, + futureStart, + futureEnd, + currentNodes, + currentStart, + currentEnd, + compare + ); + // inner diff + if (-1 < i) { + append( + get, + parentNode, + futureNodes, + futureStart, + i, + get(currentNodes[currentStart], 0) ); - currentStartNode = currentNodes[++currentStart]; - futureEndNode = futureNodes[--futureEnd]; - } - else if (compare(currentEndNode, futureStartNode)) { - parentNode.insertBefore( - get(currentEndNode, 1), - get(currentStartNode, 0) + append( + get, + parentNode, + futureNodes, + i + currentChanges, + futureEnd, + next(get, currentNodes, currentEnd, currentLength, before) ); - currentEndNode = currentNodes[--currentEnd]; - futureStartNode = futureNodes[++futureStart]; - } - else { - let index = currentNodes.indexOf(futureStartNode); - if (index < 0) { - parentNode.insertBefore( - get(futureStartNode, 1), - get(currentStartNode, 0) - ); - futureStartNode = futureNodes[++futureStart]; - } - else { - let i = index; - let f = futureStart; - while ( - i <= currentEnd && - f <= futureEnd && - currentNodes[i] === futureNodes[f] - ) { - i++; - f++; - } - if (1 < (i - index)) { - if (--index === currentStart) { - parentNode.removeChild(get(currentStartNode, -1)); - } else { - remove( - get, - parentNode, - currentStartNode, - currentNodes[index] - ); - } - currentStart = i; - futureStart = f; - currentStartNode = currentNodes[i]; - futureStartNode = futureNodes[f]; - } else { - const el = currentNodes[index]; - currentNodes[index] = null; - parentNode.insertBefore(get(el, 1), get(currentStartNode, 0)); - futureStartNode = futureNodes[++futureStart]; - } - } + return futureNodes; } } - if (currentStart <= currentEnd || futureStart <= futureEnd) { - if (currentStart > currentEnd) { - const pin = futureNodes[futureEnd + 1]; - const place = pin == null ? before : get(pin, 0); - if (futureStart === futureEnd) { - parentNode.insertBefore(get(futureNodes[futureStart], 1), place); - } - else { - const fragment = parentNode.ownerDocument.createDocumentFragment(); - while (futureStart <= futureEnd) { - fragment.appendChild(get(futureNodes[futureStart++], 1)); - } - parentNode.insertBefore(fragment, place); - } - } - else { - if (currentNodes[currentStart] == null) - currentStart++; - if (currentStart === currentEnd) { - parentNode.removeChild(get(currentNodes[currentStart], -1)); - } - else { - remove( - get, - parentNode, - currentNodes[currentStart], - currentNodes[currentEnd] - ); - } + /* istanbul ignore else */ + else if (futureChanges < currentChanges) { + i = indexOf( + currentNodes, + currentStart, + currentEnd, + futureNodes, + futureStart, + futureEnd, + compare + ); + // outer diff + if (-1 < i) { + remove( + get, + parentNode, + currentNodes, + currentStart, + i + ); + remove( + get, + parentNode, + currentNodes, + i + futureChanges, + currentEnd + ); + return futureNodes; } } + + // common case with one replacement for many nodes + // or many nodes replaced for a single one + /* istanbul ignore else */ + if ((currentChanges < 2 || futureChanges < 2)) { + append( + get, + parentNode, + futureNodes, + futureStart, + futureEnd, + get(currentNodes[currentStart], 0) + ); + remove( + get, + parentNode, + currentNodes, + currentStart, + currentEnd + ); + return futureNodes; + } + + // the half match diff part has been skipped in petit-dom + // https://github.com/yelouafi/petit-dom/blob/bd6f5c919b5ae5297be01612c524c40be45f14a7/src/vdom.js#L391-L397 + // accordingly, I think it's safe to skip in here too + // if one day it'll come out like the speediest thing ever to do + // then I might add it in here too + + // Extra: before going too fancy, what about reversed lists ? + // This should bail out pretty quickly if that's not the case. + if ( + currentChanges === futureChanges && + isReversed( + futureNodes, + futureEnd, + currentNodes, + currentStart, + currentEnd, + compare + ) + ) { + append( + get, + parentNode, + futureNodes, + futureStart, + futureEnd, + next(get, currentNodes, currentEnd, currentLength, before) + ); + return futureNodes; + } + + // last resort through a smart diff + smartDiff( + get, + parentNode, + futureNodes, + futureStart, + futureEnd, + futureChanges, + currentNodes, + currentStart, + currentEnd, + currentChanges, + currentLength, + compare, + before + ); + return futureNodes; }; diff --git a/cjs/utils.js b/cjs/utils.js new file mode 100644 index 0000000..b9f7cc4 --- /dev/null +++ b/cjs/utils.js @@ -0,0 +1,395 @@ +'use strict'; +const append = (get, parent, children, start, end, before) => { + if ((end - start) < 2) + parent.insertBefore(get(children[start], 1), before); + else { + const fragment = parent.ownerDocument.createDocumentFragment(); + while (start < end) + fragment.appendChild(get(children[start++], 1)); + parent.insertBefore(fragment, before); + } +}; +exports.append = append; + +const eqeq = (a, b) => a == b; +exports.eqeq = eqeq; + +const identity = O => O; +exports.identity = identity; + +const indexOf = ( + moreNodes, + moreStart, + moreEnd, + lessNodes, + lessStart, + lessEnd, + compare +) => { + const length = lessEnd - lessStart; + /* istanbul ignore if */ + if (length < 1) + return -1; + while ((moreEnd - moreStart) >= length) { + let m = moreStart; + let l = lessStart; + while ( + m < moreEnd && + l < lessEnd && + compare(moreNodes[m], lessNodes[l]) + ) { + m++; + l++; + } + if (l === lessEnd) + return moreStart; + moreStart = m + 1; + } + return -1; +}; +exports.indexOf = indexOf; + +const isReversed = ( + futureNodes, + futureEnd, + currentNodes, + currentStart, + currentEnd, + compare +) => { + while ( + currentStart < currentEnd && + compare( + currentNodes[currentStart], + futureNodes[futureEnd - 1] + )) { + currentStart++; + futureEnd--; + }; + return futureEnd === 0; +}; +exports.isReversed = isReversed; + +const next = (get, list, i, length, before) => i < length ? + get(list[i], 0) : + (0 < i ? + get(list[i - 1], -0).nextSibling : + before); +exports.next = next; + +const remove = (get, parent, children, start, end) => { + if ((end - start) < 2) + parent.removeChild(get(children[start], -1)); + else { + const range = parent.ownerDocument.createRange(); + range.setStartBefore(get(children[start], -1)); + range.setEndAfter(get(children[end - 1], -1)); + range.deleteContents(); + } +}; +exports.remove = remove; + +// - - - - - - - - - - - - - - - - - - - +// diff related constants and utilities +// - - - - - - - - - - - - - - - - - - - + +const DELETION = -1; +const INSERTION = 1; +const SKIP = 0; +const SKIP_OND = 50; + +/* istanbul ignore next */ +const Rel = typeof Map === 'undefined' ? + function () { + const k = [], v = []; + return { + has: value => -1 < k.indexOf(value), + get: value => v[k.indexOf(value)], + set: value => { + const i = k.indexOf(value); + v[i < 0 ? (k.push(value) - 1) : i] = value; + } + }; + } : + Map +; + +const HS = ( + futureNodes, + futureStart, + futureEnd, + futureChanges, + currentNodes, + currentStart, + currentEnd, + currentChanges +) => { + + let k = 0; + /* istanbul ignore next */ + let minLen = futureChanges < currentChanges ? futureChanges : currentChanges; + const link = Array(minLen++); + const tresh = Array(minLen); + tresh[0] = -1; + + for (let i = 1; i < minLen; i++) + tresh[i] = currentEnd; + + const keymap = new Rel; + for (let i = currentStart; i < currentEnd; i++) + keymap.set(currentNodes[i], i); + + for (let i = futureStart; i < futureEnd; i++) { + const idxInOld = keymap.get(futureNodes[i]); + if (idxInOld != null) { + k = findK(tresh, minLen, idxInOld); + /* istanbul ignore else */ + if (-1 < k) { + tresh[k] = idxInOld; + link[k] = { + newi: i, + oldi: idxInOld, + prev: link[k - 1] + }; + } + } + } + + k = --minLen; + --currentEnd; + while (tresh[k] > currentEnd) --k; + + minLen = currentChanges + futureChanges - k; + const diff = Array(minLen); + let ptr = link[k]; + --futureEnd; + while (ptr) { + const {newi, oldi} = ptr; + while (futureEnd > newi) { + diff[--minLen] = INSERTION; + --futureEnd; + } + while (currentEnd > oldi) { + diff[--minLen] = DELETION; + --currentEnd; + } + diff[--minLen] = SKIP; + --futureEnd; + --currentEnd; + ptr = ptr.prev; + } + while (futureEnd >= futureStart) { + diff[--minLen] = INSERTION; + --futureEnd; + } + while (currentEnd >= currentStart) { + diff[--minLen] = DELETION; + --currentEnd; + } + return diff; +}; + +// this is pretty much the same petit-dom code without the delete map part +// https://github.com/yelouafi/petit-dom/blob/bd6f5c919b5ae5297be01612c524c40be45f14a7/src/vdom.js#L556-L561 +const OND = ( + futureNodes, + futureStart, + rows, + currentNodes, + currentStart, + cols, + compare +) => { + const length = rows + cols; + const v = []; + let d, k, r, c, pv, cv, pd; + outer: for (d = 0; d <= length; d++) { + /* istanbul ignore if */ + if (d > SKIP_OND) + return null; + pd = d - 1; + /* istanbul ignore next */ + pv = d ? v[d - 1] : [0, 0]; + cv = v[d] = []; + for (k = -d; k <= d; k += 2) { + if (k === -d || (k !== d && pv[pd + k - 1] < pv[pd + k + 1])) { + c = pv[pd + k + 1]; + } else { + c = pv[pd + k - 1] + 1; + } + r = c - k; + while ( + c < cols && + r < rows && + compare( + currentNodes[currentStart + c], + futureNodes[futureStart + r] + ) + ) { + c++; + r++; + } + if (c === cols && r === rows) { + break outer; + } + cv[d + k] = c; + } + } + + const diff = Array(d / 2 + length / 2); + let diffIdx = diff.length - 1; + for (d = v.length - 1; d >= 0; d--) { + while ( + c > 0 && + r > 0 && + compare( + currentNodes[currentStart + c - 1], + futureNodes[futureStart + r - 1] + ) + ) { + // diagonal edge = equality + diff[diffIdx--] = SKIP; + c--; + r--; + } + if (!d) + break; + pd = d - 1; + /* istanbul ignore next */ + pv = d ? v[d - 1] : [0, 0]; + k = c - r; + if (k === -d || (k !== d && pv[pd + k - 1] < pv[pd + k + 1])) { + // vertical edge = insertion + r--; + diff[diffIdx--] = INSERTION; + } else { + // horizontal edge = deletion + c--; + diff[diffIdx--] = DELETION; + } + } + return diff; +}; + +const applyDiff = ( + diff, + get, + parentNode, + futureNodes, + futureStart, + currentNodes, + currentStart, + currentLength, + before +) => { + const live = new Rel; + const length = diff.length; + let currentIndex = currentStart; + let i = 0; + while (i < length) { + switch (diff[i++]) { + case SKIP: + futureStart++; + currentIndex++; + break; + case INSERTION: + // TODO: bulk appends for sequential nodes + live.set(futureNodes[futureStart], 1); + append( + get, + parentNode, + futureNodes, + futureStart++, + futureStart, + currentIndex < currentLength ? + get(currentNodes[currentIndex], 1) : + before + ); + break; + case DELETION: + currentIndex++; + break; + } + } + i = 0; + while (i < length) { + switch (diff[i++]) { + case SKIP: + currentStart++; + break; + case DELETION: + // TODO: bulk removes for sequential nodes + if (live.has(currentNodes[currentStart])) + currentStart++; + else + remove( + get, + parentNode, + currentNodes, + currentStart++, + currentStart + ); + break; + } + } +}; + +const findK = (ktr, length, j) => { + let lo = 1; + let hi = length; + while (lo < hi) { + var mid = ((lo + hi) / 2) >>> 0; + if (j < ktr[mid]) + hi = mid; + else + lo = mid + 1; + } + return lo; +} + +const smartDiff = ( + get, + parentNode, + futureNodes, + futureStart, + futureEnd, + futureChanges, + currentNodes, + currentStart, + currentEnd, + currentChanges, + currentLength, + compare, + before +) => { + applyDiff( + OND( + futureNodes, + futureStart, + futureChanges, + currentNodes, + currentStart, + currentChanges, + compare + ) || + HS( + futureNodes, + futureStart, + futureEnd, + futureChanges, + currentNodes, + currentStart, + currentEnd, + currentChanges + ), + get, + parentNode, + futureNodes, + futureStart, + currentNodes, + currentStart, + currentLength, + before + ); +}; +exports.smartDiff = smartDiff; diff --git a/coverage/coverage.json b/coverage/coverage.json index 1e95d18..d6fe3a3 100644 --- a/coverage/coverage.json +++ b/coverage/coverage.json @@ -1 +1 @@ -{"/Users/agiammarchi/git/domdiff/cjs/index.js":{"path":"/Users/agiammarchi/git/domdiff/cjs/index.js","s":{"1":1,"2":847,"3":1,"4":531,"5":1,"6":25,"7":1,"8":24,"9":24,"10":24,"11":24,"12":1,"13":107,"14":54,"15":107,"16":107,"17":107,"18":107,"19":107,"20":107,"21":107,"22":107,"23":107,"24":107,"25":107,"26":424,"27":38,"28":386,"29":3,"30":383,"31":22,"32":361,"33":5,"34":356,"35":135,"36":135,"37":221,"38":52,"39":52,"40":169,"41":55,"42":55,"43":55,"44":114,"45":21,"46":21,"47":21,"48":93,"49":93,"50":55,"51":55,"52":38,"53":38,"54":38,"55":58,"56":58,"57":38,"58":13,"59":11,"60":2,"61":13,"62":13,"63":13,"64":13,"65":25,"66":25,"67":25,"68":25,"69":107,"70":86,"71":36,"72":36,"73":36,"74":13,"75":23,"76":23,"77":66,"78":23,"79":50,"80":2,"81":50,"82":27,"83":23,"84":107,"85":1},"b":{"1":[1,24],"2":[54,53],"3":[107,106],"4":[107,105],"5":[56,51],"6":[531,474],"7":[38,386],"8":[3,383],"9":[22,361],"10":[5,356],"11":[135,221],"12":[52,169],"13":[55,114],"14":[21,93],"15":[55,38],"16":[96,88,85],"17":[13,25],"18":[11,2],"19":[86,21],"20":[107,57],"21":[36,50],"22":[27,9],"23":[13,23],"24":[2,48],"25":[27,23]},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":10,"column":0},"end":{"line":10,"column":30}},"2":{"start":{"line":10,"column":23},"end":{"line":10,"column":29}},"3":{"start":{"line":12,"column":0},"end":{"line":12,"column":24}},"4":{"start":{"line":12,"column":22},"end":{"line":12,"column":23}},"5":{"start":{"line":14,"column":0},"end":{"line":23,"column":2}},"6":{"start":{"line":15,"column":2},"end":{"line":22,"column":3}},"7":{"start":{"line":16,"column":4},"end":{"line":16,"column":44}},"8":{"start":{"line":18,"column":4},"end":{"line":18,"column":57}},"9":{"start":{"line":19,"column":4},"end":{"line":19,"column":42}},"10":{"start":{"line":20,"column":4},"end":{"line":20,"column":38}},"11":{"start":{"line":21,"column":4},"end":{"line":21,"column":27}},"12":{"start":{"line":25,"column":0},"end":{"line":159,"column":2}},"13":{"start":{"line":34,"column":2},"end":{"line":35,"column":17}},"14":{"start":{"line":35,"column":4},"end":{"line":35,"column":17}},"15":{"start":{"line":36,"column":2},"end":{"line":36,"column":42}},"16":{"start":{"line":37,"column":2},"end":{"line":37,"column":39}},"17":{"start":{"line":38,"column":2},"end":{"line":38,"column":72}},"18":{"start":{"line":39,"column":2},"end":{"line":39,"column":40}},"19":{"start":{"line":40,"column":2},"end":{"line":40,"column":43}},"20":{"start":{"line":41,"column":2},"end":{"line":41,"column":41}},"21":{"start":{"line":42,"column":2},"end":{"line":42,"column":48}},"22":{"start":{"line":43,"column":2},"end":{"line":43,"column":41}},"23":{"start":{"line":44,"column":2},"end":{"line":44,"column":39}},"24":{"start":{"line":45,"column":2},"end":{"line":45,"column":45}},"25":{"start":{"line":46,"column":2},"end":{"line":126,"column":3}},"26":{"start":{"line":47,"column":4},"end":{"line":125,"column":5}},"27":{"start":{"line":48,"column":6},"end":{"line":48,"column":54}},"28":{"start":{"line":50,"column":9},"end":{"line":125,"column":5}},"29":{"start":{"line":51,"column":6},"end":{"line":51,"column":50}},"30":{"start":{"line":53,"column":9},"end":{"line":125,"column":5}},"31":{"start":{"line":54,"column":6},"end":{"line":54,"column":51}},"32":{"start":{"line":56,"column":9},"end":{"line":125,"column":5}},"33":{"start":{"line":57,"column":6},"end":{"line":57,"column":47}},"34":{"start":{"line":59,"column":9},"end":{"line":125,"column":5}},"35":{"start":{"line":60,"column":6},"end":{"line":60,"column":54}},"36":{"start":{"line":61,"column":6},"end":{"line":61,"column":51}},"37":{"start":{"line":63,"column":9},"end":{"line":125,"column":5}},"38":{"start":{"line":64,"column":6},"end":{"line":64,"column":50}},"39":{"start":{"line":65,"column":6},"end":{"line":65,"column":47}},"40":{"start":{"line":67,"column":9},"end":{"line":125,"column":5}},"41":{"start":{"line":68,"column":6},"end":{"line":71,"column":8}},"42":{"start":{"line":72,"column":6},"end":{"line":72,"column":54}},"43":{"start":{"line":73,"column":6},"end":{"line":73,"column":47}},"44":{"start":{"line":75,"column":9},"end":{"line":125,"column":5}},"45":{"start":{"line":76,"column":6},"end":{"line":79,"column":8}},"46":{"start":{"line":80,"column":6},"end":{"line":80,"column":50}},"47":{"start":{"line":81,"column":6},"end":{"line":81,"column":51}},"48":{"start":{"line":84,"column":6},"end":{"line":84,"column":56}},"49":{"start":{"line":85,"column":6},"end":{"line":124,"column":7}},"50":{"start":{"line":86,"column":8},"end":{"line":89,"column":10}},"51":{"start":{"line":90,"column":8},"end":{"line":90,"column":53}},"52":{"start":{"line":93,"column":8},"end":{"line":93,"column":22}},"53":{"start":{"line":94,"column":8},"end":{"line":94,"column":28}},"54":{"start":{"line":95,"column":8},"end":{"line":102,"column":9}},"55":{"start":{"line":100,"column":10},"end":{"line":100,"column":14}},"56":{"start":{"line":101,"column":10},"end":{"line":101,"column":14}},"57":{"start":{"line":103,"column":8},"end":{"line":123,"column":9}},"58":{"start":{"line":104,"column":10},"end":{"line":113,"column":11}},"59":{"start":{"line":105,"column":12},"end":{"line":105,"column":62}},"60":{"start":{"line":107,"column":12},"end":{"line":112,"column":14}},"61":{"start":{"line":114,"column":10},"end":{"line":114,"column":27}},"62":{"start":{"line":115,"column":10},"end":{"line":115,"column":26}},"63":{"start":{"line":116,"column":10},"end":{"line":116,"column":45}},"64":{"start":{"line":117,"column":10},"end":{"line":117,"column":43}},"65":{"start":{"line":119,"column":10},"end":{"line":119,"column":41}},"66":{"start":{"line":120,"column":10},"end":{"line":120,"column":37}},"67":{"start":{"line":121,"column":10},"end":{"line":121,"column":72}},"68":{"start":{"line":122,"column":10},"end":{"line":122,"column":55}},"69":{"start":{"line":127,"column":2},"end":{"line":157,"column":3}},"70":{"start":{"line":128,"column":4},"end":{"line":156,"column":5}},"71":{"start":{"line":129,"column":6},"end":{"line":129,"column":45}},"72":{"start":{"line":130,"column":6},"end":{"line":130,"column":55}},"73":{"start":{"line":131,"column":6},"end":{"line":140,"column":7}},"74":{"start":{"line":132,"column":8},"end":{"line":132,"column":73}},"75":{"start":{"line":135,"column":8},"end":{"line":135,"column":75}},"76":{"start":{"line":136,"column":8},"end":{"line":138,"column":9}},"77":{"start":{"line":137,"column":10},"end":{"line":137,"column":67}},"78":{"start":{"line":139,"column":8},"end":{"line":139,"column":49}},"79":{"start":{"line":143,"column":6},"end":{"line":144,"column":23}},"80":{"start":{"line":144,"column":8},"end":{"line":144,"column":23}},"81":{"start":{"line":145,"column":6},"end":{"line":155,"column":7}},"82":{"start":{"line":146,"column":8},"end":{"line":146,"column":68}},"83":{"start":{"line":149,"column":8},"end":{"line":154,"column":10}},"84":{"start":{"line":158,"column":2},"end":{"line":158,"column":21}},"85":{"start":{"line":161,"column":0},"end":{"line":161,"column":78}}},"branchMap":{"1":{"line":15,"type":"if","locations":[{"start":{"line":15,"column":2},"end":{"line":15,"column":2}},{"start":{"line":15,"column":2},"end":{"line":15,"column":2}}]},"2":{"line":34,"type":"if","locations":[{"start":{"line":34,"column":2},"end":{"line":34,"column":2}},{"start":{"line":34,"column":2},"end":{"line":34,"column":2}}]},"3":{"line":36,"type":"binary-expr","locations":[{"start":{"line":36,"column":18},"end":{"line":36,"column":33}},{"start":{"line":36,"column":37},"end":{"line":36,"column":41}}]},"4":{"line":37,"type":"binary-expr","locations":[{"start":{"line":37,"column":14},"end":{"line":37,"column":26}},{"start":{"line":37,"column":30},"end":{"line":37,"column":38}}]},"5":{"line":38,"type":"cond-expr","locations":[{"start":{"line":38,"column":42},"end":{"line":38,"column":46}},{"start":{"line":38,"column":49},"end":{"line":38,"column":71}}]},"6":{"line":46,"type":"binary-expr","locations":[{"start":{"line":46,"column":9},"end":{"line":46,"column":35}},{"start":{"line":46,"column":39},"end":{"line":46,"column":63}}]},"7":{"line":47,"type":"if","locations":[{"start":{"line":47,"column":4},"end":{"line":47,"column":4}},{"start":{"line":47,"column":4},"end":{"line":47,"column":4}}]},"8":{"line":50,"type":"if","locations":[{"start":{"line":50,"column":9},"end":{"line":50,"column":9}},{"start":{"line":50,"column":9},"end":{"line":50,"column":9}}]},"9":{"line":53,"type":"if","locations":[{"start":{"line":53,"column":9},"end":{"line":53,"column":9}},{"start":{"line":53,"column":9},"end":{"line":53,"column":9}}]},"10":{"line":56,"type":"if","locations":[{"start":{"line":56,"column":9},"end":{"line":56,"column":9}},{"start":{"line":56,"column":9},"end":{"line":56,"column":9}}]},"11":{"line":59,"type":"if","locations":[{"start":{"line":59,"column":9},"end":{"line":59,"column":9}},{"start":{"line":59,"column":9},"end":{"line":59,"column":9}}]},"12":{"line":63,"type":"if","locations":[{"start":{"line":63,"column":9},"end":{"line":63,"column":9}},{"start":{"line":63,"column":9},"end":{"line":63,"column":9}}]},"13":{"line":67,"type":"if","locations":[{"start":{"line":67,"column":9},"end":{"line":67,"column":9}},{"start":{"line":67,"column":9},"end":{"line":67,"column":9}}]},"14":{"line":75,"type":"if","locations":[{"start":{"line":75,"column":9},"end":{"line":75,"column":9}},{"start":{"line":75,"column":9},"end":{"line":75,"column":9}}]},"15":{"line":85,"type":"if","locations":[{"start":{"line":85,"column":6},"end":{"line":85,"column":6}},{"start":{"line":85,"column":6},"end":{"line":85,"column":6}}]},"16":{"line":96,"type":"binary-expr","locations":[{"start":{"line":96,"column":10},"end":{"line":96,"column":25}},{"start":{"line":97,"column":10},"end":{"line":97,"column":24}},{"start":{"line":98,"column":10},"end":{"line":98,"column":44}}]},"17":{"line":103,"type":"if","locations":[{"start":{"line":103,"column":8},"end":{"line":103,"column":8}},{"start":{"line":103,"column":8},"end":{"line":103,"column":8}}]},"18":{"line":104,"type":"if","locations":[{"start":{"line":104,"column":10},"end":{"line":104,"column":10}},{"start":{"line":104,"column":10},"end":{"line":104,"column":10}}]},"19":{"line":127,"type":"if","locations":[{"start":{"line":127,"column":2},"end":{"line":127,"column":2}},{"start":{"line":127,"column":2},"end":{"line":127,"column":2}}]},"20":{"line":127,"type":"binary-expr","locations":[{"start":{"line":127,"column":6},"end":{"line":127,"column":32}},{"start":{"line":127,"column":36},"end":{"line":127,"column":60}}]},"21":{"line":128,"type":"if","locations":[{"start":{"line":128,"column":4},"end":{"line":128,"column":4}},{"start":{"line":128,"column":4},"end":{"line":128,"column":4}}]},"22":{"line":130,"type":"cond-expr","locations":[{"start":{"line":130,"column":34},"end":{"line":130,"column":40}},{"start":{"line":130,"column":43},"end":{"line":130,"column":54}}]},"23":{"line":131,"type":"if","locations":[{"start":{"line":131,"column":6},"end":{"line":131,"column":6}},{"start":{"line":131,"column":6},"end":{"line":131,"column":6}}]},"24":{"line":143,"type":"if","locations":[{"start":{"line":143,"column":6},"end":{"line":143,"column":6}},{"start":{"line":143,"column":6},"end":{"line":143,"column":6}}]},"25":{"line":145,"type":"if","locations":[{"start":{"line":145,"column":6},"end":{"line":145,"column":6}},{"start":{"line":145,"column":6},"end":{"line":145,"column":6}}]}}}} \ No newline at end of file +{"/Users/agiammarchi/git/domdiff/cjs/index.js":{"path":"/Users/agiammarchi/git/domdiff/cjs/index.js","s":{"1":1,"2":1,"3":132,"4":65,"5":132,"6":132,"7":132,"8":132,"9":132,"10":132,"11":132,"12":132,"13":132,"14":124,"15":124,"16":132,"17":79,"18":79,"19":132,"20":132,"21":132,"22":6,"23":126,"24":31,"25":31,"26":95,"27":22,"28":22,"29":73,"30":73,"31":73,"32":73,"33":23,"34":23,"35":5,"36":5,"37":5,"38":50,"39":18,"40":18,"41":4,"42":4,"43":4,"44":64,"45":6,"46":6,"47":6,"48":58,"49":7,"50":7,"51":51,"52":51,"53":1},"b":{"1":[65,67],"2":[132,131],"3":[132,130],"4":[67,65],"5":[256,231,221],"6":[211,174,152],"7":[6,126],"8":[132,37],"9":[31,95],"10":[126,31],"11":[22,73],"12":[95,22],"13":[23,50],"14":[5,18],"15":[18,32],"16":[4,14],"17":[6,58],"18":[64,60],"19":[7,51],"20":[58,30]},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":4,"column":0},"end":{"line":6,"column":26}},"2":{"start":{"line":8,"column":0},"end":{"line":220,"column":2}},"3":{"start":{"line":17,"column":2},"end":{"line":18,"column":17}},"4":{"start":{"line":18,"column":4},"end":{"line":18,"column":17}},"5":{"start":{"line":20,"column":2},"end":{"line":20,"column":42}},"6":{"start":{"line":21,"column":2},"end":{"line":21,"column":39}},"7":{"start":{"line":22,"column":2},"end":{"line":22,"column":72}},"8":{"start":{"line":24,"column":2},"end":{"line":24,"column":44}},"9":{"start":{"line":25,"column":2},"end":{"line":25,"column":33}},"10":{"start":{"line":26,"column":2},"end":{"line":26,"column":23}},"11":{"start":{"line":28,"column":2},"end":{"line":28,"column":37}},"12":{"start":{"line":29,"column":2},"end":{"line":29,"column":22}},"13":{"start":{"line":32,"column":2},"end":{"line":39,"column":3}},"14":{"start":{"line":37,"column":4},"end":{"line":37,"column":19}},"15":{"start":{"line":38,"column":4},"end":{"line":38,"column":18}},"16":{"start":{"line":42,"column":2},"end":{"line":49,"column":3}},"17":{"start":{"line":47,"column":4},"end":{"line":47,"column":17}},"18":{"start":{"line":48,"column":4},"end":{"line":48,"column":16}},"19":{"start":{"line":51,"column":2},"end":{"line":51,"column":50}},"20":{"start":{"line":52,"column":2},"end":{"line":52,"column":47}},"21":{"start":{"line":55,"column":2},"end":{"line":56,"column":23}},"22":{"start":{"line":56,"column":4},"end":{"line":56,"column":23}},"23":{"start":{"line":59,"column":2},"end":{"line":69,"column":3}},"24":{"start":{"line":60,"column":4},"end":{"line":67,"column":6}},"25":{"start":{"line":68,"column":4},"end":{"line":68,"column":23}},"26":{"start":{"line":72,"column":2},"end":{"line":81,"column":3}},"27":{"start":{"line":73,"column":4},"end":{"line":79,"column":6}},"28":{"start":{"line":80,"column":4},"end":{"line":80,"column":23}},"29":{"start":{"line":83,"column":2},"end":{"line":83,"column":51}},"30":{"start":{"line":84,"column":2},"end":{"line":84,"column":48}},"31":{"start":{"line":85,"column":2},"end":{"line":85,"column":13}},"32":{"start":{"line":88,"column":2},"end":{"line":148,"column":3}},"33":{"start":{"line":89,"column":4},"end":{"line":97,"column":6}},"34":{"start":{"line":99,"column":4},"end":{"line":117,"column":5}},"35":{"start":{"line":100,"column":6},"end":{"line":107,"column":8}},"36":{"start":{"line":108,"column":6},"end":{"line":115,"column":8}},"37":{"start":{"line":116,"column":6},"end":{"line":116,"column":25}},"38":{"start":{"line":120,"column":7},"end":{"line":148,"column":3}},"39":{"start":{"line":121,"column":4},"end":{"line":129,"column":6}},"40":{"start":{"line":131,"column":4},"end":{"line":147,"column":5}},"41":{"start":{"line":132,"column":6},"end":{"line":138,"column":8}},"42":{"start":{"line":139,"column":6},"end":{"line":145,"column":8}},"43":{"start":{"line":146,"column":6},"end":{"line":146,"column":25}},"44":{"start":{"line":153,"column":2},"end":{"line":170,"column":3}},"45":{"start":{"line":154,"column":4},"end":{"line":161,"column":6}},"46":{"start":{"line":162,"column":4},"end":{"line":168,"column":6}},"47":{"start":{"line":169,"column":4},"end":{"line":169,"column":23}},"48":{"start":{"line":180,"column":2},"end":{"line":200,"column":3}},"49":{"start":{"line":191,"column":4},"end":{"line":198,"column":6}},"50":{"start":{"line":199,"column":4},"end":{"line":199,"column":23}},"51":{"start":{"line":203,"column":2},"end":{"line":217,"column":4}},"52":{"start":{"line":219,"column":2},"end":{"line":219,"column":21}},"53":{"start":{"line":222,"column":0},"end":{"line":222,"column":78}}},"branchMap":{"1":{"line":17,"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":17,"column":2}},{"start":{"line":17,"column":2},"end":{"line":17,"column":2}}]},"2":{"line":20,"type":"binary-expr","locations":[{"start":{"line":20,"column":18},"end":{"line":20,"column":33}},{"start":{"line":20,"column":37},"end":{"line":20,"column":41}}]},"3":{"line":21,"type":"binary-expr","locations":[{"start":{"line":21,"column":14},"end":{"line":21,"column":26}},{"start":{"line":21,"column":30},"end":{"line":21,"column":38}}]},"4":{"line":22,"type":"cond-expr","locations":[{"start":{"line":22,"column":42},"end":{"line":22,"column":46}},{"start":{"line":22,"column":49},"end":{"line":22,"column":71}}]},"5":{"line":33,"type":"binary-expr","locations":[{"start":{"line":33,"column":4},"end":{"line":33,"column":29}},{"start":{"line":34,"column":4},"end":{"line":34,"column":27}},{"start":{"line":35,"column":4},"end":{"line":35,"column":65}}]},"6":{"line":43,"type":"binary-expr","locations":[{"start":{"line":43,"column":4},"end":{"line":43,"column":29}},{"start":{"line":44,"column":4},"end":{"line":44,"column":27}},{"start":{"line":45,"column":4},"end":{"line":45,"column":69}}]},"7":{"line":55,"type":"if","locations":[{"start":{"line":55,"column":2},"end":{"line":55,"column":2}},{"start":{"line":55,"column":2},"end":{"line":55,"column":2}}]},"8":{"line":55,"type":"binary-expr","locations":[{"start":{"line":55,"column":6},"end":{"line":55,"column":17}},{"start":{"line":55,"column":21},"end":{"line":55,"column":31}}]},"9":{"line":59,"type":"if","locations":[{"start":{"line":59,"column":2},"end":{"line":59,"column":2}},{"start":{"line":59,"column":2},"end":{"line":59,"column":2}}]},"10":{"line":59,"type":"binary-expr","locations":[{"start":{"line":59,"column":6},"end":{"line":59,"column":17}},{"start":{"line":59,"column":21},"end":{"line":59,"column":44}}]},"11":{"line":72,"type":"if","locations":[{"start":{"line":72,"column":2},"end":{"line":72,"column":2}},{"start":{"line":72,"column":2},"end":{"line":72,"column":2}}]},"12":{"line":72,"type":"binary-expr","locations":[{"start":{"line":72,"column":6},"end":{"line":72,"column":16}},{"start":{"line":72,"column":20},"end":{"line":72,"column":45}}]},"13":{"line":88,"type":"if","locations":[{"start":{"line":88,"column":2},"end":{"line":88,"column":2}},{"start":{"line":88,"column":2},"end":{"line":88,"column":2}}]},"14":{"line":99,"type":"if","locations":[{"start":{"line":99,"column":4},"end":{"line":99,"column":4}},{"start":{"line":99,"column":4},"end":{"line":99,"column":4}}]},"15":{"line":120,"type":"if","locations":[{"start":{"line":120,"column":7},"end":{"line":120,"column":7}},{"start":{"line":120,"column":7},"end":{"line":120,"column":7},"skip":true}]},"16":{"line":131,"type":"if","locations":[{"start":{"line":131,"column":4},"end":{"line":131,"column":4}},{"start":{"line":131,"column":4},"end":{"line":131,"column":4}}]},"17":{"line":153,"type":"if","locations":[{"start":{"line":153,"column":2},"end":{"line":153,"column":2}},{"start":{"line":153,"column":2},"end":{"line":153,"column":2},"skip":true}]},"18":{"line":153,"type":"binary-expr","locations":[{"start":{"line":153,"column":7},"end":{"line":153,"column":25}},{"start":{"line":153,"column":29},"end":{"line":153,"column":46}}]},"19":{"line":180,"type":"if","locations":[{"start":{"line":180,"column":2},"end":{"line":180,"column":2}},{"start":{"line":180,"column":2},"end":{"line":180,"column":2}}]},"20":{"line":181,"type":"binary-expr","locations":[{"start":{"line":181,"column":4},"end":{"line":181,"column":36}},{"start":{"line":182,"column":4},"end":{"line":189,"column":5}}]}}},"/Users/agiammarchi/git/domdiff/cjs/utils.js":{"path":"/Users/agiammarchi/git/domdiff/cjs/utils.js","s":{"1":1,"2":2108,"3":2073,"4":35,"5":35,"6":1119,"7":35,"8":1,"9":1,"10":4985,"11":1,"12":1,"13":4388,"14":1,"15":1,"16":41,"17":41,"18":0,"19":41,"20":1093,"21":1093,"22":1093,"23":45,"24":45,"25":1093,"26":9,"27":1084,"28":32,"29":1,"30":1,"31":30,"32":1052,"33":1052,"34":30,"35":1,"36":1,"37":43,"38":1,"39":1,"40":87,"41":67,"42":20,"43":20,"44":20,"45":20,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":1,"59":2,"60":2,"61":2,"62":2,"63":2,"64":2,"65":1006,"66":2,"67":2,"68":1006,"69":2,"70":2000,"71":2000,"72":1000,"73":1000,"74":1000,"75":1000,"76":2,"77":2,"78":2,"79":948,"80":2,"81":2,"82":2,"83":2,"84":2,"85":58,"86":58,"87":930,"88":930,"89":58,"90":840,"91":840,"92":58,"93":58,"94":58,"95":58,"96":2,"97":1012,"98":1012,"99":2,"100":108,"101":108,"102":2,"103":1,"104":51,"105":51,"106":51,"107":51,"108":51,"109":372,"110":2,"111":370,"112":370,"113":370,"114":370,"115":3548,"116":3237,"117":311,"118":3548,"119":3548,"120":153,"121":153,"122":3548,"123":49,"124":3499,"125":49,"126":49,"127":49,"128":268,"129":93,"130":93,"131":93,"132":268,"133":49,"134":219,"135":219,"136":219,"137":219,"138":112,"139":112,"140":107,"141":107,"142":49,"143":1,"144":51,"145":51,"146":51,"147":51,"148":51,"149":3260,"150":151,"151":151,"152":151,"153":2054,"154":2054,"155":2054,"156":1055,"157":1055,"158":51,"159":51,"160":3260,"161":151,"162":151,"163":1055,"164":1004,"165":51,"166":1055,"167":1,"168":1000,"169":1000,"170":1000,"171":10000,"172":10000,"173":7283,"174":2717,"175":1000,"176":1,"177":51,"178":1},"b":{"1":[2073,35],"2":[0,41],"3":[1138,1138,1129],"4":[9,1084],"5":[1082,1075],"6":[13,30],"7":[19,11],"8":[67,20],"9":[0,1],"10":[0,0],"11":[0,2],"12":[1000,1000],"13":[1000,0],"14":[2,370],"15":[319,51],"16":[3237,311],"17":[3548,3178,2908],"18":[3701,2452,2189],"19":[49,3499],"20":[3548,192],"21":[361,300,231],"22":[49,219],"23":[219,0],"24":[112,107],"25":[219,207,125],"26":[151,2054,1055],"27":[989,1065],"28":[151,1055],"29":[1004,51],"30":[7283,2717],"31":[51,2]},"f":{"1":0},"fnMap":{"1":{"name":"(anonymous_1)","line":103,"loc":{"start":{"line":103,"column":2},"end":{"line":103,"column":14}},"skip":true}},"statementMap":{"1":{"start":{"line":2,"column":0},"end":{"line":11,"column":2}},"2":{"start":{"line":3,"column":2},"end":{"line":10,"column":3}},"3":{"start":{"line":4,"column":4},"end":{"line":4,"column":57}},"4":{"start":{"line":6,"column":4},"end":{"line":6,"column":67}},"5":{"start":{"line":7,"column":4},"end":{"line":8,"column":54}},"6":{"start":{"line":8,"column":6},"end":{"line":8,"column":54}},"7":{"start":{"line":9,"column":4},"end":{"line":9,"column":42}},"8":{"start":{"line":12,"column":0},"end":{"line":12,"column":24}},"9":{"start":{"line":14,"column":0},"end":{"line":14,"column":30}},"10":{"start":{"line":14,"column":23},"end":{"line":14,"column":29}},"11":{"start":{"line":15,"column":0},"end":{"line":15,"column":20}},"12":{"start":{"line":17,"column":0},"end":{"line":17,"column":24}},"13":{"start":{"line":17,"column":22},"end":{"line":17,"column":23}},"14":{"start":{"line":18,"column":0},"end":{"line":18,"column":28}},"15":{"start":{"line":20,"column":0},"end":{"line":49,"column":2}},"16":{"start":{"line":29,"column":2},"end":{"line":29,"column":37}},"17":{"start":{"line":31,"column":2},"end":{"line":32,"column":14}},"18":{"start":{"line":32,"column":4},"end":{"line":32,"column":14},"skip":true},"19":{"start":{"line":33,"column":2},"end":{"line":47,"column":3}},"20":{"start":{"line":34,"column":4},"end":{"line":34,"column":22}},"21":{"start":{"line":35,"column":4},"end":{"line":35,"column":22}},"22":{"start":{"line":36,"column":4},"end":{"line":43,"column":5}},"23":{"start":{"line":41,"column":6},"end":{"line":41,"column":10}},"24":{"start":{"line":42,"column":6},"end":{"line":42,"column":10}},"25":{"start":{"line":44,"column":4},"end":{"line":45,"column":23}},"26":{"start":{"line":45,"column":6},"end":{"line":45,"column":23}},"27":{"start":{"line":46,"column":4},"end":{"line":46,"column":22}},"28":{"start":{"line":48,"column":2},"end":{"line":48,"column":12}},"29":{"start":{"line":50,"column":0},"end":{"line":50,"column":26}},"30":{"start":{"line":52,"column":0},"end":{"line":70,"column":2}},"31":{"start":{"line":60,"column":2},"end":{"line":68,"column":5}},"32":{"start":{"line":66,"column":6},"end":{"line":66,"column":21}},"33":{"start":{"line":67,"column":6},"end":{"line":67,"column":18}},"34":{"start":{"line":69,"column":2},"end":{"line":69,"column":25}},"35":{"start":{"line":71,"column":0},"end":{"line":71,"column":32}},"36":{"start":{"line":73,"column":0},"end":{"line":77,"column":24}},"37":{"start":{"line":73,"column":47},"end":{"line":77,"column":23}},"38":{"start":{"line":78,"column":0},"end":{"line":78,"column":20}},"39":{"start":{"line":80,"column":0},"end":{"line":89,"column":2}},"40":{"start":{"line":81,"column":2},"end":{"line":88,"column":3}},"41":{"start":{"line":82,"column":4},"end":{"line":82,"column":49}},"42":{"start":{"line":84,"column":4},"end":{"line":84,"column":53}},"43":{"start":{"line":85,"column":4},"end":{"line":85,"column":51}},"44":{"start":{"line":86,"column":4},"end":{"line":86,"column":50}},"45":{"start":{"line":87,"column":4},"end":{"line":87,"column":27}},"46":{"start":{"line":90,"column":0},"end":{"line":90,"column":24}},"47":{"start":{"line":96,"column":0},"end":{"line":96,"column":20}},"48":{"start":{"line":97,"column":0},"end":{"line":97,"column":20}},"49":{"start":{"line":98,"column":0},"end":{"line":98,"column":15}},"50":{"start":{"line":99,"column":0},"end":{"line":99,"column":20}},"51":{"start":{"line":102,"column":0},"end":{"line":115,"column":1},"skip":true},"52":{"start":{"line":104,"column":4},"end":{"line":104,"column":25},"skip":true},"53":{"start":{"line":105,"column":4},"end":{"line":112,"column":6},"skip":true},"54":{"start":{"line":106,"column":20},"end":{"line":106,"column":41},"skip":true},"55":{"start":{"line":107,"column":20},"end":{"line":107,"column":39},"skip":true},"56":{"start":{"line":109,"column":8},"end":{"line":109,"column":35},"skip":true},"57":{"start":{"line":110,"column":8},"end":{"line":110,"column":51},"skip":true},"58":{"start":{"line":117,"column":0},"end":{"line":190,"column":2}},"59":{"start":{"line":128,"column":2},"end":{"line":128,"column":12}},"60":{"start":{"line":130,"column":2},"end":{"line":130,"column":79},"skip":true},"61":{"start":{"line":131,"column":2},"end":{"line":131,"column":31}},"62":{"start":{"line":132,"column":2},"end":{"line":132,"column":30}},"63":{"start":{"line":133,"column":2},"end":{"line":133,"column":16}},"64":{"start":{"line":135,"column":2},"end":{"line":136,"column":26}},"65":{"start":{"line":136,"column":4},"end":{"line":136,"column":26}},"66":{"start":{"line":138,"column":2},"end":{"line":138,"column":25}},"67":{"start":{"line":139,"column":2},"end":{"line":140,"column":35}},"68":{"start":{"line":140,"column":4},"end":{"line":140,"column":35}},"69":{"start":{"line":142,"column":2},"end":{"line":156,"column":3}},"70":{"start":{"line":143,"column":4},"end":{"line":143,"column":48}},"71":{"start":{"line":144,"column":4},"end":{"line":155,"column":5}},"72":{"start":{"line":145,"column":6},"end":{"line":145,"column":41}},"73":{"start":{"line":147,"column":6},"end":{"line":154,"column":7}},"74":{"start":{"line":148,"column":8},"end":{"line":148,"column":28}},"75":{"start":{"line":149,"column":8},"end":{"line":153,"column":10}},"76":{"start":{"line":158,"column":2},"end":{"line":158,"column":15}},"77":{"start":{"line":159,"column":2},"end":{"line":159,"column":15}},"78":{"start":{"line":160,"column":2},"end":{"line":160,"column":36}},"79":{"start":{"line":160,"column":32},"end":{"line":160,"column":36}},"80":{"start":{"line":162,"column":2},"end":{"line":162,"column":46}},"81":{"start":{"line":163,"column":2},"end":{"line":163,"column":29}},"82":{"start":{"line":164,"column":2},"end":{"line":164,"column":20}},"83":{"start":{"line":165,"column":2},"end":{"line":165,"column":14}},"84":{"start":{"line":166,"column":2},"end":{"line":180,"column":3}},"85":{"start":{"line":167,"column":4},"end":{"line":167,"column":29}},"86":{"start":{"line":168,"column":4},"end":{"line":171,"column":5}},"87":{"start":{"line":169,"column":6},"end":{"line":169,"column":33}},"88":{"start":{"line":170,"column":6},"end":{"line":170,"column":18}},"89":{"start":{"line":172,"column":4},"end":{"line":175,"column":5}},"90":{"start":{"line":173,"column":6},"end":{"line":173,"column":32}},"91":{"start":{"line":174,"column":6},"end":{"line":174,"column":19}},"92":{"start":{"line":176,"column":4},"end":{"line":176,"column":26}},"93":{"start":{"line":177,"column":4},"end":{"line":177,"column":16}},"94":{"start":{"line":178,"column":4},"end":{"line":178,"column":17}},"95":{"start":{"line":179,"column":4},"end":{"line":179,"column":19}},"96":{"start":{"line":181,"column":2},"end":{"line":184,"column":3}},"97":{"start":{"line":182,"column":4},"end":{"line":182,"column":31}},"98":{"start":{"line":183,"column":4},"end":{"line":183,"column":16}},"99":{"start":{"line":185,"column":2},"end":{"line":188,"column":3}},"100":{"start":{"line":186,"column":4},"end":{"line":186,"column":30}},"101":{"start":{"line":187,"column":4},"end":{"line":187,"column":17}},"102":{"start":{"line":189,"column":2},"end":{"line":189,"column":14}},"103":{"start":{"line":194,"column":0},"end":{"line":272,"column":2}},"104":{"start":{"line":203,"column":2},"end":{"line":203,"column":29}},"105":{"start":{"line":204,"column":2},"end":{"line":204,"column":15}},"106":{"start":{"line":205,"column":2},"end":{"line":205,"column":29}},"107":{"start":{"line":206,"column":2},"end":{"line":237,"column":3}},"108":{"start":{"line":206,"column":9},"end":{"line":237,"column":3}},"109":{"start":{"line":208,"column":4},"end":{"line":209,"column":18}},"110":{"start":{"line":209,"column":6},"end":{"line":209,"column":18},"skip":true},"111":{"start":{"line":210,"column":4},"end":{"line":210,"column":15}},"112":{"start":{"line":212,"column":4},"end":{"line":212,"column":31},"skip":true},"113":{"start":{"line":213,"column":4},"end":{"line":213,"column":19}},"114":{"start":{"line":214,"column":4},"end":{"line":236,"column":5}},"115":{"start":{"line":215,"column":6},"end":{"line":219,"column":7}},"116":{"start":{"line":216,"column":8},"end":{"line":216,"column":27}},"117":{"start":{"line":218,"column":8},"end":{"line":218,"column":31}},"118":{"start":{"line":220,"column":6},"end":{"line":220,"column":16}},"119":{"start":{"line":221,"column":6},"end":{"line":231,"column":7}},"120":{"start":{"line":229,"column":8},"end":{"line":229,"column":12}},"121":{"start":{"line":230,"column":8},"end":{"line":230,"column":12}},"122":{"start":{"line":232,"column":6},"end":{"line":234,"column":7}},"123":{"start":{"line":233,"column":8},"end":{"line":233,"column":20}},"124":{"start":{"line":235,"column":6},"end":{"line":235,"column":20}},"125":{"start":{"line":239,"column":2},"end":{"line":239,"column":41}},"126":{"start":{"line":240,"column":2},"end":{"line":240,"column":32}},"127":{"start":{"line":241,"column":2},"end":{"line":270,"column":3}},"128":{"start":{"line":242,"column":4},"end":{"line":254,"column":5}},"129":{"start":{"line":251,"column":6},"end":{"line":251,"column":29}},"130":{"start":{"line":252,"column":6},"end":{"line":252,"column":10}},"131":{"start":{"line":253,"column":6},"end":{"line":253,"column":10}},"132":{"start":{"line":255,"column":4},"end":{"line":256,"column":12}},"133":{"start":{"line":256,"column":6},"end":{"line":256,"column":12}},"134":{"start":{"line":257,"column":4},"end":{"line":257,"column":15}},"135":{"start":{"line":259,"column":4},"end":{"line":259,"column":31},"skip":true},"136":{"start":{"line":260,"column":4},"end":{"line":260,"column":14}},"137":{"start":{"line":261,"column":4},"end":{"line":269,"column":5}},"138":{"start":{"line":263,"column":6},"end":{"line":263,"column":10}},"139":{"start":{"line":264,"column":6},"end":{"line":264,"column":34}},"140":{"start":{"line":267,"column":6},"end":{"line":267,"column":10}},"141":{"start":{"line":268,"column":6},"end":{"line":268,"column":33}},"142":{"start":{"line":271,"column":2},"end":{"line":271,"column":14}},"143":{"start":{"line":274,"column":0},"end":{"line":335,"column":2}},"144":{"start":{"line":285,"column":2},"end":{"line":285,"column":23}},"145":{"start":{"line":286,"column":2},"end":{"line":286,"column":29}},"146":{"start":{"line":287,"column":2},"end":{"line":287,"column":34}},"147":{"start":{"line":288,"column":2},"end":{"line":288,"column":12}},"148":{"start":{"line":289,"column":2},"end":{"line":313,"column":3}},"149":{"start":{"line":290,"column":4},"end":{"line":312,"column":5}},"150":{"start":{"line":292,"column":8},"end":{"line":292,"column":22}},"151":{"start":{"line":293,"column":8},"end":{"line":293,"column":23}},"152":{"start":{"line":294,"column":8},"end":{"line":294,"column":14}},"153":{"start":{"line":297,"column":8},"end":{"line":297,"column":46}},"154":{"start":{"line":298,"column":8},"end":{"line":307,"column":10}},"155":{"start":{"line":308,"column":8},"end":{"line":308,"column":14}},"156":{"start":{"line":310,"column":8},"end":{"line":310,"column":23}},"157":{"start":{"line":311,"column":8},"end":{"line":311,"column":14}},"158":{"start":{"line":314,"column":2},"end":{"line":314,"column":8}},"159":{"start":{"line":315,"column":2},"end":{"line":334,"column":3}},"160":{"start":{"line":316,"column":4},"end":{"line":333,"column":5}},"161":{"start":{"line":318,"column":8},"end":{"line":318,"column":23}},"162":{"start":{"line":319,"column":8},"end":{"line":319,"column":14}},"163":{"start":{"line":322,"column":8},"end":{"line":331,"column":12}},"164":{"start":{"line":323,"column":10},"end":{"line":323,"column":25}},"165":{"start":{"line":325,"column":10},"end":{"line":331,"column":12}},"166":{"start":{"line":332,"column":8},"end":{"line":332,"column":14}},"167":{"start":{"line":337,"column":0},"end":{"line":348,"column":1}},"168":{"start":{"line":338,"column":2},"end":{"line":338,"column":13}},"169":{"start":{"line":339,"column":2},"end":{"line":339,"column":18}},"170":{"start":{"line":340,"column":2},"end":{"line":346,"column":3}},"171":{"start":{"line":341,"column":4},"end":{"line":341,"column":36}},"172":{"start":{"line":342,"column":4},"end":{"line":345,"column":19}},"173":{"start":{"line":343,"column":6},"end":{"line":343,"column":15}},"174":{"start":{"line":345,"column":6},"end":{"line":345,"column":19}},"175":{"start":{"line":347,"column":2},"end":{"line":347,"column":12}},"176":{"start":{"line":350,"column":0},"end":{"line":394,"column":2}},"177":{"start":{"line":365,"column":2},"end":{"line":393,"column":4}},"178":{"start":{"line":395,"column":0},"end":{"line":395,"column":30}}},"branchMap":{"1":{"line":3,"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":3,"column":2}},{"start":{"line":3,"column":2},"end":{"line":3,"column":2}}]},"2":{"line":31,"type":"if","locations":[{"start":{"line":31,"column":2},"end":{"line":31,"column":2},"skip":true},{"start":{"line":31,"column":2},"end":{"line":31,"column":2}}]},"3":{"line":37,"type":"binary-expr","locations":[{"start":{"line":37,"column":6},"end":{"line":37,"column":17}},{"start":{"line":38,"column":6},"end":{"line":38,"column":17}},{"start":{"line":39,"column":6},"end":{"line":39,"column":41}}]},"4":{"line":44,"type":"if","locations":[{"start":{"line":44,"column":4},"end":{"line":44,"column":4}},{"start":{"line":44,"column":4},"end":{"line":44,"column":4}}]},"5":{"line":61,"type":"binary-expr","locations":[{"start":{"line":61,"column":4},"end":{"line":61,"column":29}},{"start":{"line":62,"column":4},"end":{"line":65,"column":5}}]},"6":{"line":73,"type":"cond-expr","locations":[{"start":{"line":74,"column":14},"end":{"line":74,"column":29}},{"start":{"line":75,"column":15},"end":{"line":77,"column":22}}]},"7":{"line":75,"type":"cond-expr","locations":[{"start":{"line":76,"column":16},"end":{"line":76,"column":48}},{"start":{"line":77,"column":16},"end":{"line":77,"column":22}}]},"8":{"line":81,"type":"if","locations":[{"start":{"line":81,"column":2},"end":{"line":81,"column":2}},{"start":{"line":81,"column":2},"end":{"line":81,"column":2}}]},"9":{"line":102,"type":"cond-expr","locations":[{"start":{"line":103,"column":2},"end":{"line":113,"column":3},"skip":true},{"start":{"line":114,"column":2},"end":{"line":114,"column":5},"skip":true}]},"10":{"line":110,"type":"cond-expr","locations":[{"start":{"line":110,"column":19},"end":{"line":110,"column":36},"skip":true},{"start":{"line":110,"column":40},"end":{"line":110,"column":41},"skip":true}]},"11":{"line":130,"type":"cond-expr","locations":[{"start":{"line":130,"column":48},"end":{"line":130,"column":61},"skip":true},{"start":{"line":130,"column":64},"end":{"line":130,"column":78},"skip":true}]},"12":{"line":144,"type":"if","locations":[{"start":{"line":144,"column":4},"end":{"line":144,"column":4}},{"start":{"line":144,"column":4},"end":{"line":144,"column":4}}]},"13":{"line":147,"type":"if","locations":[{"start":{"line":147,"column":6},"end":{"line":147,"column":6}},{"start":{"line":147,"column":6},"end":{"line":147,"column":6},"skip":true}]},"14":{"line":208,"type":"if","locations":[{"start":{"line":208,"column":4},"end":{"line":208,"column":4},"skip":true},{"start":{"line":208,"column":4},"end":{"line":208,"column":4}}]},"15":{"line":212,"type":"cond-expr","locations":[{"start":{"line":212,"column":13},"end":{"line":212,"column":21},"skip":true},{"start":{"line":212,"column":24},"end":{"line":212,"column":30},"skip":true}]},"16":{"line":215,"type":"if","locations":[{"start":{"line":215,"column":6},"end":{"line":215,"column":6}},{"start":{"line":215,"column":6},"end":{"line":215,"column":6}}]},"17":{"line":215,"type":"binary-expr","locations":[{"start":{"line":215,"column":10},"end":{"line":215,"column":18}},{"start":{"line":215,"column":23},"end":{"line":215,"column":30}},{"start":{"line":215,"column":34},"end":{"line":215,"column":65}}]},"18":{"line":222,"type":"binary-expr","locations":[{"start":{"line":222,"column":8},"end":{"line":222,"column":16}},{"start":{"line":223,"column":8},"end":{"line":223,"column":16}},{"start":{"line":224,"column":8},"end":{"line":227,"column":9}}]},"19":{"line":232,"type":"if","locations":[{"start":{"line":232,"column":6},"end":{"line":232,"column":6}},{"start":{"line":232,"column":6},"end":{"line":232,"column":6}}]},"20":{"line":232,"type":"binary-expr","locations":[{"start":{"line":232,"column":10},"end":{"line":232,"column":20}},{"start":{"line":232,"column":24},"end":{"line":232,"column":34}}]},"21":{"line":243,"type":"binary-expr","locations":[{"start":{"line":243,"column":6},"end":{"line":243,"column":11}},{"start":{"line":244,"column":6},"end":{"line":244,"column":11}},{"start":{"line":245,"column":6},"end":{"line":248,"column":7}}]},"22":{"line":255,"type":"if","locations":[{"start":{"line":255,"column":4},"end":{"line":255,"column":4}},{"start":{"line":255,"column":4},"end":{"line":255,"column":4}}]},"23":{"line":259,"type":"cond-expr","locations":[{"start":{"line":259,"column":13},"end":{"line":259,"column":21},"skip":true},{"start":{"line":259,"column":24},"end":{"line":259,"column":30},"skip":true}]},"24":{"line":261,"type":"if","locations":[{"start":{"line":261,"column":4},"end":{"line":261,"column":4}},{"start":{"line":261,"column":4},"end":{"line":261,"column":4}}]},"25":{"line":261,"type":"binary-expr","locations":[{"start":{"line":261,"column":8},"end":{"line":261,"column":16}},{"start":{"line":261,"column":21},"end":{"line":261,"column":28}},{"start":{"line":261,"column":32},"end":{"line":261,"column":63}}]},"26":{"line":290,"type":"switch","locations":[{"start":{"line":291,"column":6},"end":{"line":294,"column":14}},{"start":{"line":295,"column":6},"end":{"line":308,"column":14}},{"start":{"line":309,"column":6},"end":{"line":311,"column":14}}]},"27":{"line":304,"type":"cond-expr","locations":[{"start":{"line":305,"column":12},"end":{"line":305,"column":46}},{"start":{"line":306,"column":12},"end":{"line":306,"column":18}}]},"28":{"line":316,"type":"switch","locations":[{"start":{"line":317,"column":6},"end":{"line":319,"column":14}},{"start":{"line":320,"column":6},"end":{"line":332,"column":14}}]},"29":{"line":322,"type":"if","locations":[{"start":{"line":322,"column":8},"end":{"line":322,"column":8}},{"start":{"line":322,"column":8},"end":{"line":322,"column":8}}]},"30":{"line":342,"type":"if","locations":[{"start":{"line":342,"column":4},"end":{"line":342,"column":4}},{"start":{"line":342,"column":4},"end":{"line":342,"column":4}}]},"31":{"line":366,"type":"binary-expr","locations":[{"start":{"line":366,"column":4},"end":{"line":374,"column":5}},{"start":{"line":375,"column":4},"end":{"line":384,"column":5}}]}}}} \ No newline at end of file diff --git a/coverage/lcov-report/cjs/index.html b/coverage/lcov-report/cjs/index.html index 3064f91..73d8a98 100644 --- a/coverage/lcov-report/cjs/index.html +++ b/coverage/lcov-report/cjs/index.html @@ -22,22 +22,26 @@

100% Statements - 85/85 + 231/231
100% Branches - 51/51 + 110/110
100% Functions - 0/0 + 1/1
100% Lines - 83/83 + 226/226 +
+
+ 7 statements, 1 function, 7 branches + Ignored     
@@ -62,13 +66,26 @@

index.js
100% - 85/85 + 53/53 100% - 51/51 + 42/42 100% 0/0 100% - 83/83 + 53/53 + + + + utils.js +
+ 100% + 178/178 + 100% + 68/68 + 100% + 1/1 + 100% + 173/173 @@ -77,7 +94,7 @@

diff --git a/coverage/lcov-report/cjs/index.js.html b/coverage/lcov-report/cjs/index.js.html index d065cff..f999319 100644 --- a/coverage/lcov-report/cjs/index.js.html +++ b/coverage/lcov-report/cjs/index.js.html @@ -22,12 +22,12 @@

100% Statements - 85/85 + 53/53
100% Branches - 51/51 + 42/42
100% @@ -37,7 +37,7 @@

100% Lines - 83/83 + 53/53

@@ -204,155 +204,272 @@

159 160 161 -162  +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223      +       +       -847×   -531×   - -25× -   -24× -24× -24× -24× +  +  +132× +65× +  +132× +132× +132× +  +132× +132× +132× +  +132× +132× +  +  +132× +  +  +  +  +124× +124× +  +  +  +132×       -   +79× +79×     +132× +132×     +132× +     +126× +31×   -107× -54× -107× -107× -107× -107× -107× -107× -107× -107× -107× -107× -107× -424× -38×   -386× -   -383× +  +  +  +  +31× +  +  +  +95× 22×   -361× +  +  +  +  +  +22× +  +  +73× +73× +73× +  +  +73× +23× +  +  +  +  +  +  +  +  +  +23×   -356× -135× -135×   -221× -52× -52×   -169× -55×       -55× -55×   -114× -21× +       -21× -21×     -93× -93× -55× +  +  + +  +  +  +50× +18× +  +  +  +  +  +  +  +  +  +18× + +  +  +  +  +  +  + +  +  +  +  +  +  + +  +  +  +  +  +  +64× + +  +  +  +  +  +  +  + +  +  +  +  +  +  + +        -55×     -38× -38× -38×         -58× 58×   -38× -13× -11×   -             -13× -13× -13× -13×   -25× -25× -25× -25×   +       -107× -86× -36× -36× -36× -13×     -23× -23× -66×   -23×   +     -50× - -50× -27× +  +51×     -23×       @@ -361,33 +478,21 @@

      -107× +  +  +  +  +  +51×      
'use strict';
-/*! (c) 2017 Andrea Giammarchi (ISC) */
+/*! (c) 2018 Andrea Giammarchi (ISC) */
  
-/**
- * This code is a revisited port of the snabbdom vDOM diffing logic,
- * the same that fuels as fork Vue.js or other libraries.
- * @credits https://github.com/snabbdom/snabbdom
- */
- 
-const eqeq = (a, b) => a == b;
- 
-const identity = O => O;
- 
-const remove = (get, parentNode, before, after) => {
-  if (after == null) {
-    parentNode.removeChild(get(before, -1));
-  } else {
-    const range = parentNode.ownerDocument.createRange();
-    range.setStartBefore(get(before, -1));
-    range.setEndAfter(get(after, -1));
-    range.deleteContents();
-  }
-};
+const {
+  eqeq, identity, indexOf, isReversed, next, append, remove, smartDiff
+} = require('./utils.js');
  
 const domdiff = (
   parentNode,     // where changes happen
@@ -400,128 +505,206 @@ 

) => { if (!options) options = {}; +  const compare = options.compare || eqeq; const get = options.node || identity; const before = options.before == null ? null : get(options.before, 0); - let currentStart = 0, futureStart = 0; - let currentEnd = currentNodes.length - 1; - let currentStartNode = currentNodes[0]; - let currentEndNode = currentNodes[currentEnd]; - let futureEnd = futureNodes.length - 1; - let futureStartNode = futureNodes[0]; - let futureEndNode = futureNodes[futureEnd]; - while (currentStart <= currentEnd && futureStart <= futureEnd) { - if (currentStartNode == null) { - currentStartNode = currentNodes[++currentStart]; - } - else if (currentEndNode == null) { - currentEndNode = currentNodes[--currentEnd]; - } - else if (futureStartNode == null) { - futureStartNode = futureNodes[++futureStart]; - } - else if (futureEndNode == null) { - futureEndNode = futureNodes[--futureEnd]; - } - else if (compare(currentStartNode, futureStartNode)) { - currentStartNode = currentNodes[++currentStart]; - futureStartNode = futureNodes[++futureStart]; - } - else if (compare(currentEndNode, futureEndNode)) { - currentEndNode = currentNodes[--currentEnd]; - futureEndNode = futureNodes[--futureEnd]; - } - else if (compare(currentStartNode, futureEndNode)) { - parentNode.insertBefore( - get(currentStartNode, 1), - get(currentEndNode, -0).nextSibling +  + const currentLength = currentNodes.length; + let currentEnd = currentLength; + let currentStart = 0; +  + let futureEnd = futureNodes.length; + let futureStart = 0; +  + // common prefix + while ( + currentStart < currentEnd && + futureStart < futureEnd && + compare(currentNodes[currentStart], futureNodes[futureStart]) + ) { + currentStart++; + futureStart++; + } +  + // common suffix + while ( + currentStart < currentEnd && + futureStart < futureEnd && + compare(currentNodes[currentEnd - 1], futureNodes[futureEnd - 1]) + ) { + currentEnd--; + futureEnd--; + } +  + const currentSame = currentStart === currentEnd; + const futureSame = futureStart === futureEnd; +  + // same list + if (currentSame && futureSame) + return futureNodes; +  + // only stuff to add + if (currentSame && futureStart < futureEnd) { + append( + get, + parentNode, + futureNodes, + futureStart, + futureEnd, + next(get, currentNodes, currentStart, currentLength, before) + ); + return futureNodes; + } +  + // only stuff to remove + if (futureSame && currentStart < currentEnd) { + remove( + get, + parentNode, + currentNodes, + currentStart, + currentEnd + ); + return futureNodes; + } +  + const currentChanges = currentEnd - currentStart; + const futureChanges = futureEnd - futureStart; + let i = -1; +  + // 2 simple indels: the shortest sequence is a subsequence of the longest + if (currentChanges < futureChanges) { + i = indexOf( + futureNodes, + futureStart, + futureEnd, + currentNodes, + currentStart, + currentEnd, + compare + ); + // inner diff + if (-1 < i) { + append( + get, + parentNode, + futureNodes, + futureStart, + i, + get(currentNodes[currentStart], 0) ); - currentStartNode = currentNodes[++currentStart]; - futureEndNode = futureNodes[--futureEnd]; - } - else if (compare(currentEndNode, futureStartNode)) { - parentNode.insertBefore( - get(currentEndNode, 1), - get(currentStartNode, 0) + append( + get, + parentNode, + futureNodes, + i + currentChanges, + futureEnd, + next(get, currentNodes, currentEnd, currentLength, before) ); - currentEndNode = currentNodes[--currentEnd]; - futureStartNode = futureNodes[++futureStart]; - } - else { - let index = currentNodes.indexOf(futureStartNode); - if (index < 0) { - parentNode.insertBefore( - get(futureStartNode, 1), - get(currentStartNode, 0) - ); - futureStartNode = futureNodes[++futureStart]; - } - else { - let i = index; - let f = futureStart; - while ( - i <= currentEnd && - f <= futureEnd && - currentNodes[i] === futureNodes[f] - ) { - i++; - f++; - } - if (1 < (i - index)) { - if (--index === currentStart) { - parentNode.removeChild(get(currentStartNode, -1)); - } else { - remove( - get, - parentNode, - currentStartNode, - currentNodes[index] - ); - } - currentStart = i; - futureStart = f; - currentStartNode = currentNodes[i]; - futureStartNode = futureNodes[f]; - } else { - const el = currentNodes[index]; - currentNodes[index] = null; - parentNode.insertBefore(get(el, 1), get(currentStartNode, 0)); - futureStartNode = futureNodes[++futureStart]; - } - } + return futureNodes; } } - if (currentStart <= currentEnd || futureStart <= futureEnd) { - if (currentStart > currentEnd) { - const pin = futureNodes[futureEnd + 1]; - const place = pin == null ? before : get(pin, 0); - if (futureStart === futureEnd) { - parentNode.insertBefore(get(futureNodes[futureStart], 1), place); - } - else { - const fragment = parentNode.ownerDocument.createDocumentFragment(); - while (futureStart <= futureEnd) { - fragment.appendChild(get(futureNodes[futureStart++], 1)); - } - parentNode.insertBefore(fragment, place); - } - } - else { - if (currentNodes[currentStart] == null) - currentStart++; - if (currentStart === currentEnd) { - parentNode.removeChild(get(currentNodes[currentStart], -1)); - } - else { - remove( - get, - parentNode, - currentNodes[currentStart], - currentNodes[currentEnd] - ); - } + /* istanbul ignore else */ + else if (futureChanges < currentChanges) { + i = indexOf( + currentNodes, + currentStart, + currentEnd, + futureNodes, + futureStart, + futureEnd, + compare + ); + // outer diff + if (-1 < i) { + remove( + get, + parentNode, + currentNodes, + currentStart, + i + ); + remove( + get, + parentNode, + currentNodes, + i + futureChanges, + currentEnd + ); + return futureNodes; } } +  + // common case with one replacement for many nodes + // or many nodes replaced for a single one + /* istanbul ignore else */ + if ((currentChanges < 2 || futureChanges < 2)) { + append( + get, + parentNode, + futureNodes, + futureStart, + futureEnd, + get(currentNodes[currentStart], 0) + ); + remove( + get, + parentNode, + currentNodes, + currentStart, + currentEnd + ); + return futureNodes; + } +  + // the half match diff part has been skipped in petit-dom + // https://github.com/yelouafi/petit-dom/blob/bd6f5c919b5ae5297be01612c524c40be45f14a7/src/vdom.js#L391-L397 + // accordingly, I think it's safe to skip in here too + // if one day it'll come out like the speediest thing ever to do + // then I might add it in here too +  + // Extra: before going too fancy, what about reversed lists ? + // This should bail out pretty quickly if that's not the case. + if ( + currentChanges === futureChanges && + isReversed( + futureNodes, + futureEnd, + currentNodes, + currentStart, + currentEnd, + compare + ) + ) { + append( + get, + parentNode, + futureNodes, + futureStart, + futureEnd, + next(get, currentNodes, currentEnd, currentLength, before) + ); + return futureNodes; + } +  + // last resort through a smart diff + smartDiff( + get, + parentNode, + futureNodes, + futureStart, + futureEnd, + futureChanges, + currentNodes, + currentStart, + currentEnd, + currentChanges, + currentLength, + compare, + before + ); +  return futureNodes; };   @@ -532,7 +715,7 @@

diff --git a/coverage/lcov-report/cjs/utils.js.html b/coverage/lcov-report/cjs/utils.js.html new file mode 100644 index 0000000..a82bece --- /dev/null +++ b/coverage/lcov-report/cjs/utils.js.html @@ -0,0 +1,1254 @@ + + + + Code coverage report for cjs/utils.js + + + + + + + +
+
+

+ all files / cjs/ utils.js +

+
+
+ 100% + Statements + 178/178 +
+
+ 100% + Branches + 68/68 +
+
+ 100% + Functions + 1/1 +
+
+ 100% + Lines + 173/173 +
+
+ 7 statements, 1 function, 7 branches + Ignored      +
+
+
+
+

+
+
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 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 +338 +339 +340 +341 +342 +343 +344 +345 +346 +347 +348 +349 +350 +351 +352 +353 +354 +355 +356 +357 +358 +359 +360 +361 +362 +363 +364 +365 +366 +367 +368 +369 +370 +371 +372 +373 +374 +375 +376 +377 +378 +379 +380 +381 +382 +383 +384 +385 +386 +387 +388 +389 +390 +391 +392 +393 +394 +395 +396  + +2108× +2073× +  +35× +35× +1119× +35× +  +  + +  +4985× + +  +4388× + +  + +  +  +  +  +  +  +  +  +41× +  +41× + +41× +1093× +1093× +1093× +  +  +  +  +45× +45× +  +1093× + +1084× +  +32× +  + +  + +  +  +  +  +  +  +  +30× +  +  +  +  +  +1052× +1052× +  +30× +  + +  +43× +  +  +  +  + +  + +87× +67× +  +20× +20× +20× +20× +  +  + +  +  +  +  +  + + + + +  +  + +  + + + + +  + + +  +  +  +  +  +  + +  +  +  +  +  +  +  +  +  +  + +  + + + + +  + +1006× +  + + +1006× +  + +2000× +2000× +1000× +  +1000× +1000× +1000× +  +  +  +  +  +  +  +  + + +948× +  + + + + + +58× +58× +930× +930× +  +58× +840× +840× +  +58× +58× +58× +58× +  + +1012× +1012× +  + +108× +108× +  + +  +  +  +  + +  +  +  +  +  +  +  +  +51× +51× +51× +51× +  +372× + +370× +  +370× +370× +370× +3548× +3237× +  +311× +  +3548× +3548× +  +  +  +  +  +  +  +153× +153× +  +3548× +49× +  +3499× +  +  +  +49× +49× +49× +268× +  +  +  +  +  +  +  +  +93× +93× +93× +  +268× +49× +219× +  +219× +219× +219× +  +112× +112× +  +  +107× +107× +  +  +49× +  +  + +  +  +  +  +  +  +  +  +  +  +51× +51× +51× +51× +51× +3260× +  +151× +151× +151× +  +  +2054× +2054× +  +  +  +  +  +  +  +  +  +2054× +  +1055× +1055× +  +  +51× +51× +3260× +  +151× +151× +  +  +1055× +1004× +  +51× +  +  +  +  +  +  +1055× +  +  +  +  + +1000× +1000× +1000× +10000× +10000× +7283× +  +2717× +  +1000× +  +  + +  +  +  +  +  +  +  +  +  +  +  +  +  +  +51× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + + 
'use strict';
+const append = (get, parent, children, start, end, before) => {
+  if ((end - start) < 2)
+    parent.insertBefore(get(children[start], 1), before);
+  else {
+    const fragment = parent.ownerDocument.createDocumentFragment();
+    while (start < end)
+      fragment.appendChild(get(children[start++], 1));
+    parent.insertBefore(fragment, before);
+  }
+};
+exports.append = append;
+ 
+const eqeq = (a, b) => a == b;
+exports.eqeq = eqeq;
+ 
+const identity = O => O;
+exports.identity = identity;
+ 
+const indexOf = (
+  moreNodes,
+  moreStart,
+  moreEnd,
+  lessNodes,
+  lessStart,
+  lessEnd,
+  compare
+) => {
+  const length = lessEnd - lessStart;
+  /* istanbul ignore if */
+  Iif (length < 1)
+    return -1;
+  while ((moreEnd - moreStart) >= length) {
+    let m = moreStart;
+    let l = lessStart;
+    while (
+      m < moreEnd &&
+      l < lessEnd &&
+      compare(moreNodes[m], lessNodes[l])
+    ) {
+      m++;
+      l++;
+    }
+    if (l === lessEnd)
+      return moreStart;
+    moreStart = m + 1;
+  }
+  return -1;
+};
+exports.indexOf = indexOf;
+ 
+const isReversed = (
+  futureNodes,
+  futureEnd,
+  currentNodes,
+  currentStart,
+  currentEnd,
+  compare
+) => {
+  while (
+    currentStart < currentEnd &&
+    compare(
+      currentNodes[currentStart],
+      futureNodes[futureEnd - 1]
+    )) {
+      currentStart++;
+      futureEnd--;
+    };
+  return futureEnd === 0;
+};
+exports.isReversed = isReversed;
+ 
+const next = (get, list, i, length, before) => i < length ?
+              get(list[i], 0) :
+              (0 < i ?
+                get(list[i - 1], -0).nextSibling :
+                before);
+exports.next = next;
+ 
+const remove = (get, parent, children, start, end) => {
+  if ((end - start) < 2)
+    parent.removeChild(get(children[start], -1));
+  else {
+    const range = parent.ownerDocument.createRange();
+    range.setStartBefore(get(children[start], -1));
+    range.setEndAfter(get(children[end - 1], -1));
+    range.deleteContents();
+  }
+};
+exports.remove = remove;
+ 
+// - - - - - - - - - - - - - - - - - - -
+// diff related constants and utilities
+// - - - - - - - - - - - - - - - - - - -
+ 
+const DELETION = -1;
+const INSERTION = 1;
+const SKIP = 0;
+const SKIP_OND = 50;
+ 
+/* istanbul ignore next */
+const Rel = typeof Map === 'undefined' ?
+  function () {
+    const k = [], v = [];
+    return {
+      has: value => -1 < k.indexOf(value),
+      get: value => v[k.indexOf(value)],
+      set: value => {
+        const i = k.indexOf(value);
+        v[i < 0 ? (k.push(value) - 1) : i] = value;
+      }
+    };
+  } :
+  Map
+;
+ 
+const HS = (
+  futureNodes,
+  futureStart,
+  futureEnd,
+  futureChanges,
+  currentNodes,
+  currentStart,
+  currentEnd,
+  currentChanges
+) => {
+ 
+  let k = 0;
+  /* istanbul ignore next */
+  let minLen = futureChanges < currentChanges ? futureChanges : currentChanges;
+  const link = Array(minLen++);
+  const tresh = Array(minLen);
+  tresh[0] = -1;
+ 
+  for (let i = 1; i < minLen; i++)
+    tresh[i] = currentEnd;
+ 
+  const keymap = new Rel;
+  for (let i = currentStart; i < currentEnd; i++)
+    keymap.set(currentNodes[i], i);
+ 
+  for (let i = futureStart; i < futureEnd; i++) {
+    const idxInOld = keymap.get(futureNodes[i]);
+    if (idxInOld != null) {
+      k = findK(tresh, minLen, idxInOld);
+      /* istanbul ignore else */
+      Eif (-1 < k) {
+        tresh[k] = idxInOld;
+        link[k] = {
+          newi: i,
+          oldi: idxInOld,
+          prev: link[k - 1]
+        };
+      }
+    }
+  }
+ 
+  k = --minLen;
+  --currentEnd;
+  while (tresh[k] > currentEnd) --k;
+ 
+  minLen = currentChanges + futureChanges - k;
+  const diff = Array(minLen);
+  let ptr = link[k];
+  --futureEnd;
+  while (ptr) {
+    const {newi, oldi} = ptr;
+    while (futureEnd > newi) {
+      diff[--minLen] = INSERTION;
+      --futureEnd;
+    }
+    while (currentEnd > oldi) {
+      diff[--minLen] = DELETION;
+      --currentEnd;
+    }
+    diff[--minLen] = SKIP;
+    --futureEnd;
+    --currentEnd;
+    ptr = ptr.prev;
+  }
+  while (futureEnd >= futureStart) {
+    diff[--minLen] = INSERTION;
+    --futureEnd;
+  }
+  while (currentEnd >= currentStart) {
+    diff[--minLen] = DELETION;
+    --currentEnd;
+  }
+  return diff;
+};
+ 
+// this is pretty much the same petit-dom code without the delete map part
+// https://github.com/yelouafi/petit-dom/blob/bd6f5c919b5ae5297be01612c524c40be45f14a7/src/vdom.js#L556-L561
+const OND = (
+  futureNodes,
+  futureStart,
+  rows,
+  currentNodes,
+  currentStart,
+  cols,
+  compare
+) => {
+  const length = rows + cols;
+  const v = [];
+  let d, k, r, c, pv, cv, pd;
+  outer: for (d = 0; d <= length; d++) {
+    /* istanbul ignore if */
+    if (d > SKIP_OND)
+      return null;
+    pd = d - 1;
+    /* istanbul ignore next */
+    pv = d ? v[d - 1] : [0, 0];
+    cv = v[d] = [];
+    for (k = -d; k <= d; k += 2) {
+      if (k === -d || (k !== d && pv[pd + k - 1] < pv[pd + k + 1])) {
+        c = pv[pd + k + 1];
+      } else {
+        c = pv[pd + k - 1] + 1;
+      }
+      r = c - k;
+      while (
+        c < cols &&
+        r < rows &&
+        compare(
+          currentNodes[currentStart + c],
+          futureNodes[futureStart + r]
+        )
+      ) {
+        c++;
+        r++;
+      }
+      if (c === cols && r === rows) {
+        break outer;
+      }
+      cv[d + k] = c;
+    }
+  }
+ 
+  const diff = Array(d / 2 + length / 2);
+  let diffIdx = diff.length - 1;
+  for (d = v.length - 1; d >= 0; d--) {
+    while (
+      c > 0 &&
+      r > 0 &&
+      compare(
+        currentNodes[currentStart + c - 1],
+        futureNodes[futureStart + r - 1]
+      )
+    ) {
+      // diagonal edge = equality
+      diff[diffIdx--] = SKIP;
+      c--;
+      r--;
+    }
+    if (!d)
+      break;
+    pd = d - 1;
+    /* istanbul ignore next */
+    pv = d ? v[d - 1] : [0, 0];
+    k = c - r;
+    if (k === -d || (k !== d && pv[pd + k - 1] < pv[pd + k + 1])) {
+      // vertical edge = insertion
+      r--;
+      diff[diffIdx--] = INSERTION;
+    } else {
+      // horizontal edge = deletion
+      c--;
+      diff[diffIdx--] = DELETION;
+    }
+  }
+  return diff;
+};
+ 
+const applyDiff = (
+  diff,
+  get,
+  parentNode,
+  futureNodes,
+  futureStart,
+  currentNodes,
+  currentStart,
+  currentLength,
+  before
+) => {
+  const live = new Rel;
+  const length = diff.length;
+  let currentIndex = currentStart;
+  let i = 0;
+  while (i < length) {
+    switch (diff[i++]) {
+      case SKIP:
+        futureStart++;
+        currentIndex++;
+        break;
+      case INSERTION:
+        // TODO: bulk appends for sequential nodes
+        live.set(futureNodes[futureStart], 1);
+        append(
+          get,
+          parentNode,
+          futureNodes,
+          futureStart++,
+          futureStart,
+          currentIndex < currentLength ?
+            get(currentNodes[currentIndex], 1) :
+            before
+        );
+        break;
+      case DELETION:
+        currentIndex++;
+        break;
+    }
+  }
+  i = 0;
+  while (i < length) {
+    switch (diff[i++]) {
+      case SKIP:
+        currentStart++;
+        break;
+      case DELETION:
+        // TODO: bulk removes for sequential nodes
+        if (live.has(currentNodes[currentStart]))
+          currentStart++;
+        else
+          remove(
+            get,
+            parentNode,
+            currentNodes,
+            currentStart++,
+            currentStart
+          );
+        break;
+    }
+  }
+};
+ 
+const findK = (ktr, length, j) => {
+  let lo = 1;
+  let hi = length;
+  while (lo < hi) {
+    var mid = ((lo + hi) / 2) >>> 0;
+    if (j < ktr[mid])
+      hi = mid;
+    else
+      lo = mid + 1;
+  }
+  return lo;
+}
+ 
+const smartDiff = (
+  get,
+  parentNode,
+  futureNodes,
+  futureStart,
+  futureEnd,
+  futureChanges,
+  currentNodes,
+  currentStart,
+  currentEnd,
+  currentChanges,
+  currentLength,
+  compare,
+  before
+) => {
+  applyDiff(
+    OND(
+      futureNodes,
+      futureStart,
+      futureChanges,
+      currentNodes,
+      currentStart,
+      currentChanges,
+      compare
+    ) ||
+    HS(
+      futureNodes,
+      futureStart,
+      futureEnd,
+      futureChanges,
+      currentNodes,
+      currentStart,
+      currentEnd,
+      currentChanges
+    ),
+    get,
+    parentNode,
+    futureNodes,
+    futureStart,
+    currentNodes,
+    currentStart,
+    currentLength,
+    before
+  );
+};
+exports.smartDiff = smartDiff;
+ 
+
+
+ + + + + + + diff --git a/coverage/lcov-report/index.html b/coverage/lcov-report/index.html index 08653c1..a1ac4ec 100644 --- a/coverage/lcov-report/index.html +++ b/coverage/lcov-report/index.html @@ -22,22 +22,26 @@

100% Statements - 85/85 + 231/231
100% Branches - 51/51 + 110/110
100% Functions - 0/0 + 1/1
100% Lines - 83/83 + 226/226 +
+
+ 7 statements, 1 function, 7 branches + Ignored     
@@ -62,13 +66,13 @@

cjs/
100% - 85/85 + 231/231 100% - 51/51 + 110/110 100% - 0/0 + 1/1 100% - 83/83 + 226/226 @@ -77,7 +81,7 @@

diff --git a/coverage/lcov.info b/coverage/lcov.info index 767c4c4..27d5b3e 100644 --- a/coverage/lcov.info +++ b/coverage/lcov.info @@ -2,142 +2,355 @@ TN: SF:/Users/agiammarchi/git/domdiff/cjs/index.js FNF:0 FNH:0 -DA:10,847 -DA:12,531 -DA:14,1 -DA:15,25 -DA:16,1 -DA:18,24 -DA:19,24 -DA:20,24 -DA:21,24 -DA:25,1 -DA:34,107 -DA:35,54 -DA:36,107 -DA:37,107 -DA:38,107 -DA:39,107 -DA:40,107 -DA:41,107 -DA:42,107 -DA:43,107 -DA:44,107 -DA:45,107 -DA:46,107 -DA:47,424 -DA:48,38 -DA:50,386 -DA:51,3 -DA:53,383 -DA:54,22 -DA:56,361 -DA:57,5 -DA:59,356 -DA:60,135 -DA:61,135 -DA:63,221 -DA:64,52 -DA:65,52 -DA:67,169 -DA:68,55 -DA:72,55 -DA:73,55 -DA:75,114 -DA:76,21 -DA:80,21 -DA:81,21 -DA:84,93 -DA:85,93 -DA:86,55 -DA:90,55 -DA:93,38 -DA:94,38 -DA:95,38 -DA:100,58 -DA:101,58 -DA:103,38 -DA:104,13 -DA:105,11 -DA:107,2 -DA:114,13 -DA:115,13 -DA:116,13 -DA:117,13 -DA:119,25 -DA:120,25 -DA:121,25 -DA:122,25 -DA:127,107 -DA:128,86 -DA:129,36 -DA:130,36 -DA:131,36 -DA:132,13 -DA:135,23 -DA:136,23 -DA:137,66 -DA:139,23 -DA:143,50 -DA:144,2 -DA:145,50 -DA:146,27 -DA:149,23 -DA:158,107 -DA:161,1 -LF:83 -LH:83 -BRDA:15,1,0,1 -BRDA:15,1,1,24 -BRDA:34,2,0,54 -BRDA:34,2,1,53 -BRDA:36,3,0,107 -BRDA:36,3,1,106 -BRDA:37,4,0,107 -BRDA:37,4,1,105 -BRDA:38,5,0,56 -BRDA:38,5,1,51 -BRDA:46,6,0,531 -BRDA:46,6,1,474 -BRDA:47,7,0,38 -BRDA:47,7,1,386 -BRDA:50,8,0,3 -BRDA:50,8,1,383 -BRDA:53,9,0,22 -BRDA:53,9,1,361 -BRDA:56,10,0,5 -BRDA:56,10,1,356 -BRDA:59,11,0,135 -BRDA:59,11,1,221 -BRDA:63,12,0,52 -BRDA:63,12,1,169 -BRDA:67,13,0,55 -BRDA:67,13,1,114 -BRDA:75,14,0,21 -BRDA:75,14,1,93 -BRDA:85,15,0,55 -BRDA:85,15,1,38 -BRDA:96,16,0,96 -BRDA:96,16,1,88 -BRDA:96,16,2,85 -BRDA:103,17,0,13 -BRDA:103,17,1,25 -BRDA:104,18,0,11 -BRDA:104,18,1,2 -BRDA:127,19,0,86 -BRDA:127,19,1,21 -BRDA:127,20,0,107 -BRDA:127,20,1,57 -BRDA:128,21,0,36 -BRDA:128,21,1,50 -BRDA:130,22,0,27 -BRDA:130,22,1,9 -BRDA:131,23,0,13 -BRDA:131,23,1,23 -BRDA:143,24,0,2 -BRDA:143,24,1,48 -BRDA:145,25,0,27 -BRDA:145,25,1,23 -BRF:51 -BRH:51 +DA:4,1 +DA:8,1 +DA:17,132 +DA:18,65 +DA:20,132 +DA:21,132 +DA:22,132 +DA:24,132 +DA:25,132 +DA:26,132 +DA:28,132 +DA:29,132 +DA:32,132 +DA:37,124 +DA:38,124 +DA:42,132 +DA:47,79 +DA:48,79 +DA:51,132 +DA:52,132 +DA:55,132 +DA:56,6 +DA:59,126 +DA:60,31 +DA:68,31 +DA:72,95 +DA:73,22 +DA:80,22 +DA:83,73 +DA:84,73 +DA:85,73 +DA:88,73 +DA:89,23 +DA:99,23 +DA:100,5 +DA:108,5 +DA:116,5 +DA:120,50 +DA:121,18 +DA:131,18 +DA:132,4 +DA:139,4 +DA:146,4 +DA:153,64 +DA:154,6 +DA:162,6 +DA:169,6 +DA:180,58 +DA:191,7 +DA:199,7 +DA:203,51 +DA:219,51 +DA:222,1 +LF:53 +LH:53 +BRDA:17,1,0,65 +BRDA:17,1,1,67 +BRDA:20,2,0,132 +BRDA:20,2,1,131 +BRDA:21,3,0,132 +BRDA:21,3,1,130 +BRDA:22,4,0,67 +BRDA:22,4,1,65 +BRDA:33,5,0,256 +BRDA:33,5,1,231 +BRDA:33,5,2,221 +BRDA:43,6,0,211 +BRDA:43,6,1,174 +BRDA:43,6,2,152 +BRDA:55,7,0,6 +BRDA:55,7,1,126 +BRDA:55,8,0,132 +BRDA:55,8,1,37 +BRDA:59,9,0,31 +BRDA:59,9,1,95 +BRDA:59,10,0,126 +BRDA:59,10,1,31 +BRDA:72,11,0,22 +BRDA:72,11,1,73 +BRDA:72,12,0,95 +BRDA:72,12,1,22 +BRDA:88,13,0,23 +BRDA:88,13,1,50 +BRDA:99,14,0,5 +BRDA:99,14,1,18 +BRDA:120,15,0,18 +BRDA:120,15,1,32 +BRDA:131,16,0,4 +BRDA:131,16,1,14 +BRDA:153,17,0,6 +BRDA:153,17,1,58 +BRDA:153,18,0,64 +BRDA:153,18,1,60 +BRDA:180,19,0,7 +BRDA:180,19,1,51 +BRDA:181,20,0,58 +BRDA:181,20,1,30 +BRF:42 +BRH:42 +end_of_record +TN: +SF:/Users/agiammarchi/git/domdiff/cjs/utils.js +FN:103,(anonymous_1) +FNF:1 +FNH:1 +FNDA:0,(anonymous_1) +DA:2,1 +DA:3,2108 +DA:4,2073 +DA:6,35 +DA:7,35 +DA:8,1119 +DA:9,35 +DA:12,1 +DA:14,4985 +DA:15,1 +DA:17,4388 +DA:18,1 +DA:20,1 +DA:29,41 +DA:31,41 +DA:32,1 +DA:33,41 +DA:34,1093 +DA:35,1093 +DA:36,1093 +DA:41,45 +DA:42,45 +DA:44,1093 +DA:45,9 +DA:46,1084 +DA:48,32 +DA:50,1 +DA:52,1 +DA:60,30 +DA:66,1052 +DA:67,1052 +DA:69,30 +DA:71,1 +DA:73,43 +DA:78,1 +DA:80,1 +DA:81,87 +DA:82,67 +DA:84,20 +DA:85,20 +DA:86,20 +DA:87,20 +DA:90,1 +DA:96,1 +DA:97,1 +DA:98,1 +DA:99,1 +DA:102,1 +DA:104,1 +DA:105,1 +DA:106,1 +DA:107,1 +DA:109,1 +DA:110,1 +DA:117,1 +DA:128,2 +DA:130,2 +DA:131,2 +DA:132,2 +DA:133,2 +DA:135,2 +DA:136,1006 +DA:138,2 +DA:139,2 +DA:140,1006 +DA:142,2 +DA:143,2000 +DA:144,2000 +DA:145,1000 +DA:147,1000 +DA:148,1000 +DA:149,1000 +DA:158,2 +DA:159,2 +DA:160,948 +DA:162,2 +DA:163,2 +DA:164,2 +DA:165,2 +DA:166,2 +DA:167,58 +DA:168,58 +DA:169,930 +DA:170,930 +DA:172,58 +DA:173,840 +DA:174,840 +DA:176,58 +DA:177,58 +DA:178,58 +DA:179,58 +DA:181,2 +DA:182,1012 +DA:183,1012 +DA:185,2 +DA:186,108 +DA:187,108 +DA:189,2 +DA:194,1 +DA:203,51 +DA:204,51 +DA:205,51 +DA:206,51 +DA:208,372 +DA:209,2 +DA:210,370 +DA:212,370 +DA:213,370 +DA:214,370 +DA:215,3548 +DA:216,3237 +DA:218,311 +DA:220,3548 +DA:221,3548 +DA:229,153 +DA:230,153 +DA:232,3548 +DA:233,49 +DA:235,3499 +DA:239,49 +DA:240,49 +DA:241,49 +DA:242,268 +DA:251,93 +DA:252,93 +DA:253,93 +DA:255,268 +DA:256,49 +DA:257,219 +DA:259,219 +DA:260,219 +DA:261,219 +DA:263,112 +DA:264,112 +DA:267,107 +DA:268,107 +DA:271,49 +DA:274,1 +DA:285,51 +DA:286,51 +DA:287,51 +DA:288,51 +DA:289,51 +DA:290,3260 +DA:292,151 +DA:293,151 +DA:294,151 +DA:297,2054 +DA:298,2054 +DA:308,2054 +DA:310,1055 +DA:311,1055 +DA:314,51 +DA:315,51 +DA:316,3260 +DA:318,151 +DA:319,151 +DA:322,1055 +DA:323,1004 +DA:325,51 +DA:332,1055 +DA:337,1 +DA:338,1000 +DA:339,1000 +DA:340,1000 +DA:341,10000 +DA:342,10000 +DA:343,7283 +DA:345,2717 +DA:347,1000 +DA:350,1 +DA:365,51 +DA:395,1 +LF:173 +LH:173 +BRDA:3,1,0,2073 +BRDA:3,1,1,35 +BRDA:31,2,0,0 +BRDA:31,2,1,41 +BRDA:37,3,0,1138 +BRDA:37,3,1,1138 +BRDA:37,3,2,1129 +BRDA:44,4,0,9 +BRDA:44,4,1,1084 +BRDA:61,5,0,1082 +BRDA:61,5,1,1075 +BRDA:73,6,0,13 +BRDA:73,6,1,30 +BRDA:75,7,0,19 +BRDA:75,7,1,11 +BRDA:81,8,0,67 +BRDA:81,8,1,20 +BRDA:102,9,0,0 +BRDA:102,9,1,1 +BRDA:110,10,0,0 +BRDA:110,10,1,0 +BRDA:130,11,0,0 +BRDA:130,11,1,2 +BRDA:144,12,0,1000 +BRDA:144,12,1,1000 +BRDA:147,13,0,1000 +BRDA:147,13,1,0 +BRDA:208,14,0,2 +BRDA:208,14,1,370 +BRDA:212,15,0,319 +BRDA:212,15,1,51 +BRDA:215,16,0,3237 +BRDA:215,16,1,311 +BRDA:215,17,0,3548 +BRDA:215,17,1,3178 +BRDA:215,17,2,2908 +BRDA:222,18,0,3701 +BRDA:222,18,1,2452 +BRDA:222,18,2,2189 +BRDA:232,19,0,49 +BRDA:232,19,1,3499 +BRDA:232,20,0,3548 +BRDA:232,20,1,192 +BRDA:243,21,0,361 +BRDA:243,21,1,300 +BRDA:243,21,2,231 +BRDA:255,22,0,49 +BRDA:255,22,1,219 +BRDA:259,23,0,219 +BRDA:259,23,1,0 +BRDA:261,24,0,112 +BRDA:261,24,1,107 +BRDA:261,25,0,219 +BRDA:261,25,1,207 +BRDA:261,25,2,125 +BRDA:290,26,0,151 +BRDA:290,26,1,2054 +BRDA:290,26,2,1055 +BRDA:304,27,0,989 +BRDA:304,27,1,1065 +BRDA:316,28,0,151 +BRDA:316,28,1,1055 +BRDA:322,29,0,1004 +BRDA:322,29,1,51 +BRDA:342,30,0,7283 +BRDA:342,30,1,2717 +BRDA:366,31,0,51 +BRDA:366,31,1,2 +BRF:68 +BRH:68 end_of_record diff --git a/esm/.eslintrc b/esm/.eslintrc index 6284ba7..06410ca 100644 --- a/esm/.eslintrc +++ b/esm/.eslintrc @@ -1,5 +1,5 @@ { - "extends": "eslint:recommended", + // "extends": "eslint:recommended", "globals": { "Promise": true }, diff --git a/esm/index.js b/esm/index.js index 6c221b6..28e7719 100644 --- a/esm/index.js +++ b/esm/index.js @@ -1,25 +1,10 @@ -/*! (c) 2017 Andrea Giammarchi (ISC) */ - -/** - * This code is a revisited port of the snabbdom vDOM diffing logic, - * the same that fuels as fork Vue.js or other libraries. - * @credits https://github.com/snabbdom/snabbdom - */ - -const eqeq = (a, b) => a == b; - -const identity = O => O; - -const remove = (get, parentNode, before, after) => { - if (after == null) { - parentNode.removeChild(get(before, -1)); - } else { - const range = parentNode.ownerDocument.createRange(); - range.setStartBefore(get(before, -1)); - range.setEndAfter(get(after, -1)); - range.deleteContents(); - } -}; +/*! (c) 2018 Andrea Giammarchi (ISC) */ + +import { + eqeq, identity, indexOf, isReversed, next, + append, remove, + smartDiff +} from './utils.js'; const domdiff = ( parentNode, // where changes happen @@ -32,128 +17,206 @@ const domdiff = ( ) => { if (!options) options = {}; + const compare = options.compare || eqeq; const get = options.node || identity; const before = options.before == null ? null : get(options.before, 0); - let currentStart = 0, futureStart = 0; - let currentEnd = currentNodes.length - 1; - let currentStartNode = currentNodes[0]; - let currentEndNode = currentNodes[currentEnd]; - let futureEnd = futureNodes.length - 1; - let futureStartNode = futureNodes[0]; - let futureEndNode = futureNodes[futureEnd]; - while (currentStart <= currentEnd && futureStart <= futureEnd) { - if (currentStartNode == null) { - currentStartNode = currentNodes[++currentStart]; - } - else if (currentEndNode == null) { - currentEndNode = currentNodes[--currentEnd]; - } - else if (futureStartNode == null) { - futureStartNode = futureNodes[++futureStart]; - } - else if (futureEndNode == null) { - futureEndNode = futureNodes[--futureEnd]; - } - else if (compare(currentStartNode, futureStartNode)) { - currentStartNode = currentNodes[++currentStart]; - futureStartNode = futureNodes[++futureStart]; - } - else if (compare(currentEndNode, futureEndNode)) { - currentEndNode = currentNodes[--currentEnd]; - futureEndNode = futureNodes[--futureEnd]; - } - else if (compare(currentStartNode, futureEndNode)) { - parentNode.insertBefore( - get(currentStartNode, 1), - get(currentEndNode, -0).nextSibling + + const currentLength = currentNodes.length; + let currentEnd = currentLength; + let currentStart = 0; + + let futureEnd = futureNodes.length; + let futureStart = 0; + + // common prefix + while ( + currentStart < currentEnd && + futureStart < futureEnd && + compare(currentNodes[currentStart], futureNodes[futureStart]) + ) { + currentStart++; + futureStart++; + } + + // common suffix + while ( + currentStart < currentEnd && + futureStart < futureEnd && + compare(currentNodes[currentEnd - 1], futureNodes[futureEnd - 1]) + ) { + currentEnd--; + futureEnd--; + } + + const currentSame = currentStart === currentEnd; + const futureSame = futureStart === futureEnd; + + // same list + if (currentSame && futureSame) + return futureNodes; + + // only stuff to add + if (currentSame && futureStart < futureEnd) { + append( + get, + parentNode, + futureNodes, + futureStart, + futureEnd, + next(get, currentNodes, currentStart, currentLength, before) + ); + return futureNodes; + } + + // only stuff to remove + if (futureSame && currentStart < currentEnd) { + remove( + get, + parentNode, + currentNodes, + currentStart, + currentEnd + ); + return futureNodes; + } + + const currentChanges = currentEnd - currentStart; + const futureChanges = futureEnd - futureStart; + let i = -1; + + // 2 simple indels: the shortest sequence is a subsequence of the longest + if (currentChanges < futureChanges) { + i = indexOf( + futureNodes, + futureStart, + futureEnd, + currentNodes, + currentStart, + currentEnd, + compare + ); + // inner diff + if (-1 < i) { + append( + get, + parentNode, + futureNodes, + futureStart, + i, + get(currentNodes[currentStart], 0) ); - currentStartNode = currentNodes[++currentStart]; - futureEndNode = futureNodes[--futureEnd]; - } - else if (compare(currentEndNode, futureStartNode)) { - parentNode.insertBefore( - get(currentEndNode, 1), - get(currentStartNode, 0) + append( + get, + parentNode, + futureNodes, + i + currentChanges, + futureEnd, + next(get, currentNodes, currentEnd, currentLength, before) ); - currentEndNode = currentNodes[--currentEnd]; - futureStartNode = futureNodes[++futureStart]; - } - else { - let index = currentNodes.indexOf(futureStartNode); - if (index < 0) { - parentNode.insertBefore( - get(futureStartNode, 1), - get(currentStartNode, 0) - ); - futureStartNode = futureNodes[++futureStart]; - } - else { - let i = index; - let f = futureStart; - while ( - i <= currentEnd && - f <= futureEnd && - currentNodes[i] === futureNodes[f] - ) { - i++; - f++; - } - if (1 < (i - index)) { - if (--index === currentStart) { - parentNode.removeChild(get(currentStartNode, -1)); - } else { - remove( - get, - parentNode, - currentStartNode, - currentNodes[index] - ); - } - currentStart = i; - futureStart = f; - currentStartNode = currentNodes[i]; - futureStartNode = futureNodes[f]; - } else { - const el = currentNodes[index]; - currentNodes[index] = null; - parentNode.insertBefore(get(el, 1), get(currentStartNode, 0)); - futureStartNode = futureNodes[++futureStart]; - } - } + return futureNodes; } } - if (currentStart <= currentEnd || futureStart <= futureEnd) { - if (currentStart > currentEnd) { - const pin = futureNodes[futureEnd + 1]; - const place = pin == null ? before : get(pin, 0); - if (futureStart === futureEnd) { - parentNode.insertBefore(get(futureNodes[futureStart], 1), place); - } - else { - const fragment = parentNode.ownerDocument.createDocumentFragment(); - while (futureStart <= futureEnd) { - fragment.appendChild(get(futureNodes[futureStart++], 1)); - } - parentNode.insertBefore(fragment, place); - } - } - else { - if (currentNodes[currentStart] == null) - currentStart++; - if (currentStart === currentEnd) { - parentNode.removeChild(get(currentNodes[currentStart], -1)); - } - else { - remove( - get, - parentNode, - currentNodes[currentStart], - currentNodes[currentEnd] - ); - } + /* istanbul ignore else */ + else if (futureChanges < currentChanges) { + i = indexOf( + currentNodes, + currentStart, + currentEnd, + futureNodes, + futureStart, + futureEnd, + compare + ); + // outer diff + if (-1 < i) { + remove( + get, + parentNode, + currentNodes, + currentStart, + i + ); + remove( + get, + parentNode, + currentNodes, + i + futureChanges, + currentEnd + ); + return futureNodes; } } + + // common case with one replacement for many nodes + // or many nodes replaced for a single one + /* istanbul ignore else */ + if ((currentChanges < 2 || futureChanges < 2)) { + append( + get, + parentNode, + futureNodes, + futureStart, + futureEnd, + get(currentNodes[currentStart], 0) + ); + remove( + get, + parentNode, + currentNodes, + currentStart, + currentEnd + ); + return futureNodes; + } + + // the half match diff part has been skipped in petit-dom + // https://github.com/yelouafi/petit-dom/blob/bd6f5c919b5ae5297be01612c524c40be45f14a7/src/vdom.js#L391-L397 + // accordingly, I think it's safe to skip in here too + // if one day it'll come out like the speediest thing ever to do + // then I might add it in here too + + // Extra: before going too fancy, what about reversed lists ? + // This should bail out pretty quickly if that's not the case. + if ( + currentChanges === futureChanges && + isReversed( + futureNodes, + futureEnd, + currentNodes, + currentStart, + currentEnd, + compare + ) + ) { + append( + get, + parentNode, + futureNodes, + futureStart, + futureEnd, + next(get, currentNodes, currentEnd, currentLength, before) + ); + return futureNodes; + } + + // last resort through a smart diff + smartDiff( + get, + parentNode, + futureNodes, + futureStart, + futureEnd, + futureChanges, + currentNodes, + currentStart, + currentEnd, + currentChanges, + currentLength, + compare, + before + ); + return futureNodes; }; diff --git a/esm/utils.js b/esm/utils.js new file mode 100644 index 0000000..f4f8494 --- /dev/null +++ b/esm/utils.js @@ -0,0 +1,386 @@ +export const append = (get, parent, children, start, end, before) => { + if ((end - start) < 2) + parent.insertBefore(get(children[start], 1), before); + else { + const fragment = parent.ownerDocument.createDocumentFragment(); + while (start < end) + fragment.appendChild(get(children[start++], 1)); + parent.insertBefore(fragment, before); + } +}; + +export const eqeq = (a, b) => a == b; + +export const identity = O => O; + +export const indexOf = ( + moreNodes, + moreStart, + moreEnd, + lessNodes, + lessStart, + lessEnd, + compare +) => { + const length = lessEnd - lessStart; + /* istanbul ignore if */ + if (length < 1) + return -1; + while ((moreEnd - moreStart) >= length) { + let m = moreStart; + let l = lessStart; + while ( + m < moreEnd && + l < lessEnd && + compare(moreNodes[m], lessNodes[l]) + ) { + m++; + l++; + } + if (l === lessEnd) + return moreStart; + moreStart = m + 1; + } + return -1; +}; + +export const isReversed = ( + futureNodes, + futureEnd, + currentNodes, + currentStart, + currentEnd, + compare +) => { + while ( + currentStart < currentEnd && + compare( + currentNodes[currentStart], + futureNodes[futureEnd - 1] + )) { + currentStart++; + futureEnd--; + }; + return futureEnd === 0; +}; + +export const next = (get, list, i, length, before) => i < length ? + get(list[i], 0) : + (0 < i ? + get(list[i - 1], -0).nextSibling : + before); + +export const remove = (get, parent, children, start, end) => { + if ((end - start) < 2) + parent.removeChild(get(children[start], -1)); + else { + const range = parent.ownerDocument.createRange(); + range.setStartBefore(get(children[start], -1)); + range.setEndAfter(get(children[end - 1], -1)); + range.deleteContents(); + } +}; + +// - - - - - - - - - - - - - - - - - - - +// diff related constants and utilities +// - - - - - - - - - - - - - - - - - - - + +const DELETION = -1; +const INSERTION = 1; +const SKIP = 0; +const SKIP_OND = 50; + +/* istanbul ignore next */ +const Rel = typeof Map === 'undefined' ? + function () { + const k = [], v = []; + return { + has: value => -1 < k.indexOf(value), + get: value => v[k.indexOf(value)], + set: value => { + const i = k.indexOf(value); + v[i < 0 ? (k.push(value) - 1) : i] = value; + } + }; + } : + Map +; + +const HS = ( + futureNodes, + futureStart, + futureEnd, + futureChanges, + currentNodes, + currentStart, + currentEnd, + currentChanges +) => { + + let k = 0; + /* istanbul ignore next */ + let minLen = futureChanges < currentChanges ? futureChanges : currentChanges; + const link = Array(minLen++); + const tresh = Array(minLen); + tresh[0] = -1; + + for (let i = 1; i < minLen; i++) + tresh[i] = currentEnd; + + const keymap = new Rel; + for (let i = currentStart; i < currentEnd; i++) + keymap.set(currentNodes[i], i); + + for (let i = futureStart; i < futureEnd; i++) { + const idxInOld = keymap.get(futureNodes[i]); + if (idxInOld != null) { + k = findK(tresh, minLen, idxInOld); + /* istanbul ignore else */ + if (-1 < k) { + tresh[k] = idxInOld; + link[k] = { + newi: i, + oldi: idxInOld, + prev: link[k - 1] + }; + } + } + } + + k = --minLen; + --currentEnd; + while (tresh[k] > currentEnd) --k; + + minLen = currentChanges + futureChanges - k; + const diff = Array(minLen); + let ptr = link[k]; + --futureEnd; + while (ptr) { + const {newi, oldi} = ptr; + while (futureEnd > newi) { + diff[--minLen] = INSERTION; + --futureEnd; + } + while (currentEnd > oldi) { + diff[--minLen] = DELETION; + --currentEnd; + } + diff[--minLen] = SKIP; + --futureEnd; + --currentEnd; + ptr = ptr.prev; + } + while (futureEnd >= futureStart) { + diff[--minLen] = INSERTION; + --futureEnd; + } + while (currentEnd >= currentStart) { + diff[--minLen] = DELETION; + --currentEnd; + } + return diff; +}; + +// this is pretty much the same petit-dom code without the delete map part +// https://github.com/yelouafi/petit-dom/blob/bd6f5c919b5ae5297be01612c524c40be45f14a7/src/vdom.js#L556-L561 +const OND = ( + futureNodes, + futureStart, + rows, + currentNodes, + currentStart, + cols, + compare +) => { + const length = rows + cols; + const v = []; + let d, k, r, c, pv, cv, pd; + outer: for (d = 0; d <= length; d++) { + /* istanbul ignore if */ + if (d > SKIP_OND) + return null; + pd = d - 1; + /* istanbul ignore next */ + pv = d ? v[d - 1] : [0, 0]; + cv = v[d] = []; + for (k = -d; k <= d; k += 2) { + if (k === -d || (k !== d && pv[pd + k - 1] < pv[pd + k + 1])) { + c = pv[pd + k + 1]; + } else { + c = pv[pd + k - 1] + 1; + } + r = c - k; + while ( + c < cols && + r < rows && + compare( + currentNodes[currentStart + c], + futureNodes[futureStart + r] + ) + ) { + c++; + r++; + } + if (c === cols && r === rows) { + break outer; + } + cv[d + k] = c; + } + } + + const diff = Array(d / 2 + length / 2); + let diffIdx = diff.length - 1; + for (d = v.length - 1; d >= 0; d--) { + while ( + c > 0 && + r > 0 && + compare( + currentNodes[currentStart + c - 1], + futureNodes[futureStart + r - 1] + ) + ) { + // diagonal edge = equality + diff[diffIdx--] = SKIP; + c--; + r--; + } + if (!d) + break; + pd = d - 1; + /* istanbul ignore next */ + pv = d ? v[d - 1] : [0, 0]; + k = c - r; + if (k === -d || (k !== d && pv[pd + k - 1] < pv[pd + k + 1])) { + // vertical edge = insertion + r--; + diff[diffIdx--] = INSERTION; + } else { + // horizontal edge = deletion + c--; + diff[diffIdx--] = DELETION; + } + } + return diff; +}; + +const applyDiff = ( + diff, + get, + parentNode, + futureNodes, + futureStart, + currentNodes, + currentStart, + currentLength, + before +) => { + const live = new Rel; + const length = diff.length; + let currentIndex = currentStart; + let i = 0; + while (i < length) { + switch (diff[i++]) { + case SKIP: + futureStart++; + currentIndex++; + break; + case INSERTION: + // TODO: bulk appends for sequential nodes + live.set(futureNodes[futureStart], 1); + append( + get, + parentNode, + futureNodes, + futureStart++, + futureStart, + currentIndex < currentLength ? + get(currentNodes[currentIndex], 1) : + before + ); + break; + case DELETION: + currentIndex++; + break; + } + } + i = 0; + while (i < length) { + switch (diff[i++]) { + case SKIP: + currentStart++; + break; + case DELETION: + // TODO: bulk removes for sequential nodes + if (live.has(currentNodes[currentStart])) + currentStart++; + else + remove( + get, + parentNode, + currentNodes, + currentStart++, + currentStart + ); + break; + } + } +}; + +const findK = (ktr, length, j) => { + let lo = 1; + let hi = length; + while (lo < hi) { + var mid = ((lo + hi) / 2) >>> 0; + if (j < ktr[mid]) + hi = mid; + else + lo = mid + 1; + } + return lo; +} + +export const smartDiff = ( + get, + parentNode, + futureNodes, + futureStart, + futureEnd, + futureChanges, + currentNodes, + currentStart, + currentEnd, + currentChanges, + currentLength, + compare, + before +) => { + applyDiff( + OND( + futureNodes, + futureStart, + futureChanges, + currentNodes, + currentStart, + currentChanges, + compare + ) || + HS( + futureNodes, + futureStart, + futureEnd, + futureChanges, + currentNodes, + currentStart, + currentEnd, + currentChanges + ), + get, + parentNode, + futureNodes, + futureStart, + currentNodes, + currentStart, + currentLength, + before + ); +}; diff --git a/index.js b/index.js index 1ef2874..2546894 100644 --- a/index.js +++ b/index.js @@ -1,13 +1,14 @@ var domdiff = (function () { 'use strict'; -/*! (c) 2017 Andrea Giammarchi (ISC) */ - -/** - * This code is a revisited port of the snabbdom vDOM diffing logic, - * the same that fuels as fork Vue.js or other libraries. - * @credits https://github.com/snabbdom/snabbdom - */ +var append = function append(get, parent, children, start, end, before) { + if (end - start < 2) parent.insertBefore(get(children[start], 1), before);else { + var fragment = parent.ownerDocument.createDocumentFragment(); + while (start < end) { + fragment.appendChild(get(children[start++], 1)); + }parent.insertBefore(fragment, before); + } +}; var eqeq = function eqeq(a, b) { return a == b; @@ -17,17 +18,253 @@ var identity = function identity(O) { return O; }; -var remove = function remove(get, parentNode, before, after) { - if (after == null) { - parentNode.removeChild(get(before, -1)); - } else { - var range = parentNode.ownerDocument.createRange(); - range.setStartBefore(get(before, -1)); - range.setEndAfter(get(after, -1)); +var indexOf = function indexOf(moreNodes, moreStart, moreEnd, lessNodes, lessStart, lessEnd, compare) { + var length = lessEnd - lessStart; + /* istanbul ignore if */ + if (length < 1) return -1; + while (moreEnd - moreStart >= length) { + var m = moreStart; + var l = lessStart; + while (m < moreEnd && l < lessEnd && compare(moreNodes[m], lessNodes[l])) { + m++; + l++; + } + if (l === lessEnd) return moreStart; + moreStart = m + 1; + } + return -1; +}; + +var isReversed = function isReversed(futureNodes, futureEnd, currentNodes, currentStart, currentEnd, compare) { + while (currentStart < currentEnd && compare(currentNodes[currentStart], futureNodes[futureEnd - 1])) { + currentStart++; + futureEnd--; + } + return futureEnd === 0; +}; + +var next = function next(get, list, i, length, before) { + return i < length ? get(list[i], 0) : 0 < i ? get(list[i - 1], -0).nextSibling : before; +}; + +var remove = function remove(get, parent, children, start, end) { + if (end - start < 2) parent.removeChild(get(children[start], -1));else { + var range = parent.ownerDocument.createRange(); + range.setStartBefore(get(children[start], -1)); + range.setEndAfter(get(children[end - 1], -1)); range.deleteContents(); } }; +// - - - - - - - - - - - - - - - - - - - +// diff related constants and utilities +// - - - - - - - - - - - - - - - - - - - + +var DELETION = -1; +var INSERTION = 1; +var SKIP = 0; +var SKIP_OND = 50; + +/* istanbul ignore next */ +var Rel = typeof Map === 'undefined' ? function () { + var k = [], + v = []; + return { + has: function has(value) { + return -1 < k.indexOf(value); + }, + get: function get(value) { + return v[k.indexOf(value)]; + }, + set: function set(value) { + var i = k.indexOf(value); + v[i < 0 ? k.push(value) - 1 : i] = value; + } + }; +} : Map; + +var HS = function HS(futureNodes, futureStart, futureEnd, futureChanges, currentNodes, currentStart, currentEnd, currentChanges) { + + var k = 0; + /* istanbul ignore next */ + var minLen = futureChanges < currentChanges ? futureChanges : currentChanges; + var link = Array(minLen++); + var tresh = Array(minLen); + tresh[0] = -1; + + for (var i = 1; i < minLen; i++) { + tresh[i] = currentEnd; + }var keymap = new Rel(); + for (var _i = currentStart; _i < currentEnd; _i++) { + keymap.set(currentNodes[_i], _i); + }for (var _i2 = futureStart; _i2 < futureEnd; _i2++) { + var idxInOld = keymap.get(futureNodes[_i2]); + if (idxInOld != null) { + k = findK(tresh, minLen, idxInOld); + /* istanbul ignore else */ + if (-1 < k) { + tresh[k] = idxInOld; + link[k] = { + newi: _i2, + oldi: idxInOld, + prev: link[k - 1] + }; + } + } + } + + k = --minLen; + --currentEnd; + while (tresh[k] > currentEnd) { + --k; + }minLen = currentChanges + futureChanges - k; + var diff = Array(minLen); + var ptr = link[k]; + --futureEnd; + while (ptr) { + var _ptr = ptr, + newi = _ptr.newi, + oldi = _ptr.oldi; + + while (futureEnd > newi) { + diff[--minLen] = INSERTION; + --futureEnd; + } + while (currentEnd > oldi) { + diff[--minLen] = DELETION; + --currentEnd; + } + diff[--minLen] = SKIP; + --futureEnd; + --currentEnd; + ptr = ptr.prev; + } + while (futureEnd >= futureStart) { + diff[--minLen] = INSERTION; + --futureEnd; + } + while (currentEnd >= currentStart) { + diff[--minLen] = DELETION; + --currentEnd; + } + return diff; +}; + +// this is pretty much the same petit-dom code without the delete map part +// https://github.com/yelouafi/petit-dom/blob/bd6f5c919b5ae5297be01612c524c40be45f14a7/src/vdom.js#L556-L561 +var OND = function OND(futureNodes, futureStart, rows, currentNodes, currentStart, cols, compare) { + var length = rows + cols; + var v = []; + var d = void 0, + k = void 0, + r = void 0, + c = void 0, + pv = void 0, + cv = void 0, + pd = void 0; + outer: for (d = 0; d <= length; d++) { + /* istanbul ignore if */ + if (d > SKIP_OND) return null; + pd = d - 1; + /* istanbul ignore next */ + pv = d ? v[d - 1] : [0, 0]; + cv = v[d] = []; + for (k = -d; k <= d; k += 2) { + if (k === -d || k !== d && pv[pd + k - 1] < pv[pd + k + 1]) { + c = pv[pd + k + 1]; + } else { + c = pv[pd + k - 1] + 1; + } + r = c - k; + while (c < cols && r < rows && compare(currentNodes[currentStart + c], futureNodes[futureStart + r])) { + c++; + r++; + } + if (c === cols && r === rows) { + break outer; + } + cv[d + k] = c; + } + } + + var diff = Array(d / 2 + length / 2); + var diffIdx = diff.length - 1; + for (d = v.length - 1; d >= 0; d--) { + while (c > 0 && r > 0 && compare(currentNodes[currentStart + c - 1], futureNodes[futureStart + r - 1])) { + // diagonal edge = equality + diff[diffIdx--] = SKIP; + c--; + r--; + } + if (!d) break; + pd = d - 1; + /* istanbul ignore next */ + pv = d ? v[d - 1] : [0, 0]; + k = c - r; + if (k === -d || k !== d && pv[pd + k - 1] < pv[pd + k + 1]) { + // vertical edge = insertion + r--; + diff[diffIdx--] = INSERTION; + } else { + // horizontal edge = deletion + c--; + diff[diffIdx--] = DELETION; + } + } + return diff; +}; + +var applyDiff = function applyDiff(diff, get, parentNode, futureNodes, futureStart, currentNodes, currentStart, currentLength, before) { + var live = new Rel(); + var length = diff.length; + var currentIndex = currentStart; + var i = 0; + while (i < length) { + switch (diff[i++]) { + case SKIP: + futureStart++; + currentIndex++; + break; + case INSERTION: + // TODO: bulk appends for sequential nodes + live.set(futureNodes[futureStart], 1); + append(get, parentNode, futureNodes, futureStart++, futureStart, currentIndex < currentLength ? get(currentNodes[currentIndex], 1) : before); + break; + case DELETION: + currentIndex++; + break; + } + } + i = 0; + while (i < length) { + switch (diff[i++]) { + case SKIP: + currentStart++; + break; + case DELETION: + // TODO: bulk removes for sequential nodes + if (live.has(currentNodes[currentStart])) currentStart++;else remove(get, parentNode, currentNodes, currentStart++, currentStart); + break; + } + } +}; + +var findK = function findK(ktr, length, j) { + var lo = 1; + var hi = length; + while (lo < hi) { + var mid = (lo + hi) / 2 >>> 0; + if (j < ktr[mid]) hi = mid;else lo = mid + 1; + } + return lo; +}; + +var smartDiff = function smartDiff(get, parentNode, futureNodes, futureStart, futureEnd, futureChanges, currentNodes, currentStart, currentEnd, currentChanges, currentLength, compare, before) { + applyDiff(OND(futureNodes, futureStart, futureChanges, currentNodes, currentStart, currentChanges, compare) || HS(futureNodes, futureStart, futureEnd, futureChanges, currentNodes, currentStart, currentEnd, currentChanges), get, parentNode, futureNodes, futureStart, currentNodes, currentStart, currentLength, before); +}; + +/*! (c) 2018 Andrea Giammarchi (ISC) */ + var domdiff = function domdiff(parentNode, // where changes happen currentNodes, // Array of current items/nodes futureNodes, // Array of future items/nodes @@ -37,93 +274,98 @@ options // optional object with one of the following properties // node(generic) => Node ) { if (!options) options = {}; + var compare = options.compare || eqeq; var get = options.node || identity; var before = options.before == null ? null : get(options.before, 0); - var currentStart = 0, - futureStart = 0; - var currentEnd = currentNodes.length - 1; - var currentStartNode = currentNodes[0]; - var currentEndNode = currentNodes[currentEnd]; - var futureEnd = futureNodes.length - 1; - var futureStartNode = futureNodes[0]; - var futureEndNode = futureNodes[futureEnd]; - while (currentStart <= currentEnd && futureStart <= futureEnd) { - if (currentStartNode == null) { - currentStartNode = currentNodes[++currentStart]; - } else if (currentEndNode == null) { - currentEndNode = currentNodes[--currentEnd]; - } else if (futureStartNode == null) { - futureStartNode = futureNodes[++futureStart]; - } else if (futureEndNode == null) { - futureEndNode = futureNodes[--futureEnd]; - } else if (compare(currentStartNode, futureStartNode)) { - currentStartNode = currentNodes[++currentStart]; - futureStartNode = futureNodes[++futureStart]; - } else if (compare(currentEndNode, futureEndNode)) { - currentEndNode = currentNodes[--currentEnd]; - futureEndNode = futureNodes[--futureEnd]; - } else if (compare(currentStartNode, futureEndNode)) { - parentNode.insertBefore(get(currentStartNode, 1), get(currentEndNode, -0).nextSibling); - currentStartNode = currentNodes[++currentStart]; - futureEndNode = futureNodes[--futureEnd]; - } else if (compare(currentEndNode, futureStartNode)) { - parentNode.insertBefore(get(currentEndNode, 1), get(currentStartNode, 0)); - currentEndNode = currentNodes[--currentEnd]; - futureStartNode = futureNodes[++futureStart]; - } else { - var index = currentNodes.indexOf(futureStartNode); - if (index < 0) { - parentNode.insertBefore(get(futureStartNode, 1), get(currentStartNode, 0)); - futureStartNode = futureNodes[++futureStart]; - } else { - var i = index; - var f = futureStart; - while (i <= currentEnd && f <= futureEnd && currentNodes[i] === futureNodes[f]) { - i++; - f++; - } - if (1 < i - index) { - if (--index === currentStart) { - parentNode.removeChild(get(currentStartNode, -1)); - } else { - remove(get, parentNode, currentStartNode, currentNodes[index]); - } - currentStart = i; - futureStart = f; - currentStartNode = currentNodes[i]; - futureStartNode = futureNodes[f]; - } else { - var el = currentNodes[index]; - currentNodes[index] = null; - parentNode.insertBefore(get(el, 1), get(currentStartNode, 0)); - futureStartNode = futureNodes[++futureStart]; - } - } + + var currentLength = currentNodes.length; + var currentEnd = currentLength; + var currentStart = 0; + + var futureEnd = futureNodes.length; + var futureStart = 0; + + // common prefix + while (currentStart < currentEnd && futureStart < futureEnd && compare(currentNodes[currentStart], futureNodes[futureStart])) { + currentStart++; + futureStart++; + } + + // common suffix + while (currentStart < currentEnd && futureStart < futureEnd && compare(currentNodes[currentEnd - 1], futureNodes[futureEnd - 1])) { + currentEnd--; + futureEnd--; + } + + var currentSame = currentStart === currentEnd; + var futureSame = futureStart === futureEnd; + + // same list + if (currentSame && futureSame) return futureNodes; + + // only stuff to add + if (currentSame && futureStart < futureEnd) { + append(get, parentNode, futureNodes, futureStart, futureEnd, next(get, currentNodes, currentStart, currentLength, before)); + return futureNodes; + } + + // only stuff to remove + if (futureSame && currentStart < currentEnd) { + remove(get, parentNode, currentNodes, currentStart, currentEnd); + return futureNodes; + } + + var currentChanges = currentEnd - currentStart; + var futureChanges = futureEnd - futureStart; + var i = -1; + + // 2 simple indels: the shortest sequence is a subsequence of the longest + if (currentChanges < futureChanges) { + i = indexOf(futureNodes, futureStart, futureEnd, currentNodes, currentStart, currentEnd, compare); + // inner diff + if (-1 < i) { + append(get, parentNode, futureNodes, futureStart, i, get(currentNodes[currentStart], 0)); + append(get, parentNode, futureNodes, i + currentChanges, futureEnd, next(get, currentNodes, currentEnd, currentLength, before)); + return futureNodes; } } - if (currentStart <= currentEnd || futureStart <= futureEnd) { - if (currentStart > currentEnd) { - var pin = futureNodes[futureEnd + 1]; - var place = pin == null ? before : get(pin, 0); - if (futureStart === futureEnd) { - parentNode.insertBefore(get(futureNodes[futureStart], 1), place); - } else { - var fragment = parentNode.ownerDocument.createDocumentFragment(); - while (futureStart <= futureEnd) { - fragment.appendChild(get(futureNodes[futureStart++], 1)); - } - parentNode.insertBefore(fragment, place); - } - } else { - if (currentNodes[currentStart] == null) currentStart++; - if (currentStart === currentEnd) { - parentNode.removeChild(get(currentNodes[currentStart], -1)); - } else { - remove(get, parentNode, currentNodes[currentStart], currentNodes[currentEnd]); + /* istanbul ignore else */ + else if (futureChanges < currentChanges) { + i = indexOf(currentNodes, currentStart, currentEnd, futureNodes, futureStart, futureEnd, compare); + // outer diff + if (-1 < i) { + remove(get, parentNode, currentNodes, currentStart, i); + remove(get, parentNode, currentNodes, i + futureChanges, currentEnd); + return futureNodes; } } + + // common case with one replacement for many nodes + // or many nodes replaced for a single one + /* istanbul ignore else */ + if (currentChanges < 2 || futureChanges < 2) { + append(get, parentNode, futureNodes, futureStart, futureEnd, get(currentNodes[currentStart], 0)); + remove(get, parentNode, currentNodes, currentStart, currentEnd); + return futureNodes; } + + // the half match diff part has been skipped in petit-dom + // https://github.com/yelouafi/petit-dom/blob/bd6f5c919b5ae5297be01612c524c40be45f14a7/src/vdom.js#L391-L397 + // accordingly, I think it's safe to skip in here too + // if one day it'll come out like the speediest thing ever to do + // then I might add it in here too + + // Extra: before going too fancy, what about reversed lists ? + // This should bail out pretty quickly if that's not the case. + if (currentChanges === futureChanges && isReversed(futureNodes, futureEnd, currentNodes, currentStart, currentEnd, compare)) { + append(get, parentNode, futureNodes, futureStart, futureEnd, next(get, currentNodes, currentEnd, currentLength, before)); + return futureNodes; + } + + // last resort through a smart diff + smartDiff(get, parentNode, futureNodes, futureStart, futureEnd, futureChanges, currentNodes, currentStart, currentEnd, currentChanges, currentLength, compare, before); + return futureNodes; }; diff --git a/min.js b/min.js index ad17564..a401580 100644 --- a/min.js +++ b/min.js @@ -1,2 +1 @@ -var domdiff=function(){"use strict";/*! (c) 2017 Andrea Giammarchi (ISC) */ -var e=function(e,n){return e==n},n=function(e){return e},r=function(e,n,r,l){if(null==l)n.removeChild(e(r,-1));else{var f=n.ownerDocument.createRange();f.setStartBefore(e(r,-1)),f.setEndAfter(e(l,-1)),f.deleteContents()}};return function(l,f,i,t){t||(t={});for(var o=t.compare||e,s=t.node||n,u=null==t.before?null:s(t.before,0),a=0,c=0,v=f.length-1,d=f[0],m=f[v],B=i.length-1,h=i[0],g=i[B];a<=v&&c<=B;)if(null==d)d=f[++a];else if(null==m)m=f[--v];else if(null==h)h=i[++c];else if(null==g)g=i[--B];else if(o(d,h))d=f[++a],h=i[++c];else if(o(m,g))m=f[--v],g=i[--B];else if(o(d,g))l.insertBefore(s(d,1),s(m,-0).nextSibling),d=f[++a],g=i[--B];else if(o(m,h))l.insertBefore(s(m,1),s(d,0)),m=f[--v],h=i[++c];else{var C=f.indexOf(h);if(C<0)l.insertBefore(s(h,1),s(d,0)),h=i[++c];else{for(var b=C,p=c;b<=v&&p<=B&&f[b]===i[p];)b++,p++;if(1v){var w=i[B+1],x=null==w?u:s(w,0);if(c===B)l.insertBefore(s(i[c],1),x);else{for(var S=l.ownerDocument.createDocumentFragment();c<=B;)S.appendChild(s(i[c++],1));l.insertBefore(S,x)}}else null==f[a]&&a++,a===v?l.removeChild(s(f[a],-1)):r(s,l,f[a],f[v]);return i}}(); \ No newline at end of file +var domdiff=function(){"use strict";var r=function(r,e,n,t,f,o){if(f-t<2)e.insertBefore(r(n[t],1),o);else{for(var i=e.ownerDocument.createDocumentFragment();t=u;){for(var a=e,v=f;ai;)--v;c=a+t-v;var m=Array(c),k=d[v];for(--n;k;){for(var y=k,A=y.newi,x=y.oldi;n>A;)m[--c]=1,--n;for(;i>x;)m[--c]=-1,--i;m[--c]=0,--n,--i,k=k.prev}for(;n>=e;)m[--c]=1,--n;for(;i>=o;)m[--c]=-1,--i;return m},v=function(r,e,n,t,f,o,i){var u=n+o,a=[],v=void 0,c=void 0,s=void 0,d=void 0,l=void 0,h=void 0,g=void 0;r:for(v=0;v<=u;v++){if(v>50)return null;for(g=v-1,l=v?a[v-1]:[0,0],h=a[v]=[],c=-v;c<=v;c+=2){for(d=c===-v||c!==v&&l[g+c-1]=0;v--){for(;d>0&&s>0&&i(t[f+d-1],r[e+s-1]);)p[b--]=0,d--,s--;if(!v)break;g=v-1,l=v?a[v-1]:[0,0],c=d-s,c===-v||c!==v&&l[g+c-1]>>0;n 1.10.0", + "js-yaml": "^3.11.0", + "lcov-parse": "^0.0.10", + "log-driver": "^1.2.7", + "minimist": "^1.2.0", + "request": "^2.85.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "echomd": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/echomd/-/echomd-0.1.2.tgz", + "integrity": "sha1-kNPPD55Fkwb0wdkKArZelxkj9v8=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "escodegen": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", + "dev": true, + "requires": { + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.2.0" + }, + "dependencies": { + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", + "dev": true, + "optional": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "esprima": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "dev": true + }, + "estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", + "dev": true + }, + "estree-walker": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.2.1.tgz", + "integrity": "sha1-va/oCVOD2EFNXcLs9MkXO225QS4=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "optional": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "optional": true, + "requires": { + "fill-range": "^2.1.0" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "optional": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true, + "optional": true + }, + "fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "dev": true, + "optional": true, + "requires": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true, + "optional": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "optional": true, + "requires": { + "for-in": "^1.0.1" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "1.0.6", + "mime-types": "^2.1.12" + } + }, + "fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", + "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", + "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true, + "optional": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", + "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==", + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.21", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.21.tgz", + "integrity": "sha512-En5V9za5mBt2oUA03WGD3TwDv0MKAruqsuxstbMUZaj9W9k/m1CV/9py3l0L5kw9Bln8fdHQmzHSYtvpvTLpKw==", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": "^2.1.0" + } + }, + "ignore-walk": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "minipass": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.2.4.tgz", + "integrity": "sha512-hzXIWWet/BzWhYs2b+u7dRHlruXhwdgvlTMDKC6Cb1U7ps6Ac6yQlR39xsbjWJE377YTCtKwIXIpJ5oP+j5y8g==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.1", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz", + "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==", + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "optional": true + }, + "needle": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.0.tgz", + "integrity": "sha512-eFagy6c+TYayorXw/qtAdSvaUpEbBsDwDyxYFgLZ0lTojfH7K+OdBqAF7TAFwDokJaGpubpSGG0wO3iC0XPi8w==", + "dev": true, + "optional": true, + "requires": { + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.0.tgz", + "integrity": "sha512-G7kEonQLRbcA/mOoFoxvlMrw6Q6dPf92+t/l0DFSMuSlDoWaI9JWIyPwK0jyE1bph//CUEL65/Fz1m2vJbmjQQ==", + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.3.tgz", + "integrity": "sha512-ByQ3oJ/5ETLyglU2+8dBObvhfWXX8dtPZDMePCahptliFX2iIuhyEszyFk401PZUNQH20vvdW5MLjJxkwU80Ow==", + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.10.tgz", + "integrity": "sha512-AQC0Dyhzn4EiYEfIUjCdMl0JJ61I2ER9ukf/sLxJUcZHfo+VyEfz2rMJgLZSS1v30OxPQe1cN0LZA1xbcaVfWA==", + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.7.tgz", + "integrity": "sha512-LdLD8xD4zzLsAT5xyushXDNscEjB7+2ulnl8+r1pnESlYtlJtVSoCMBGr30eDRJ3+2Gq89jK9P9e4tCEH1+ywA==", + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "optional": true, + "requires": { + "glob": "^7.0.5" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true, + "optional": true + }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.1.tgz", + "integrity": "sha512-O+v1r9yN4tOsvl90p5HAP4AEqbYhx4036AGMm075fH9F8Qwi3oJ+v4u50FkT/KkvywNGtwkk0zRI+8eYm1X/xg==", + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.2.4", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.1", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", + "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "yallist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", + "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=", + "dev": true + } + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "optional": true, + "requires": { + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "^2.0.0" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, + "handlebars": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", + "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", + "dev": true, + "requires": { + "async": "^1.4.0", + "optimist": "^0.6.1", + "source-map": "^0.4.4", + "uglify-js": "^2.6" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz", + "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==", + "dev": true, + "requires": { + "ajv": "^5.3.0", + "har-schema": "^2.0.0" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "optional": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true, + "optional": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "optional": true, + "requires": { + "is-primitive": "^2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "optional": true + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true, + "optional": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true, + "optional": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "optional": true, + "requires": { + "isarray": "1.0.0" + } + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", + "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", + "dev": true, + "requires": { + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" + }, + "dependencies": { + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "js-yaml": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", + "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true + }, + "lcov-parse": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz", + "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "lodash": { + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", + "dev": true + }, + "log-driver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", + "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", + "dev": true + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "dev": true, + "requires": { + "js-tokens": "^3.0.0" + } + }, + "math-random": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", + "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", + "dev": true, + "optional": true + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "optional": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + }, + "mime-db": { + "version": "1.36.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz", + "integrity": "sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw==", + "dev": true + }, + "mime-types": { + "version": "2.1.20", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz", + "integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==", + "dev": true, + "requires": { + "mime-db": "~1.36.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "nan": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", + "dev": true, + "optional": true + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "optional": true, + "requires": { + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + } + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "output-file-sync": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", + "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.4", + "mkdirp": "^0.5.1", + "object-assign": "^4.1.0" + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "optional": true, + "requires": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true, + "optional": true + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true, + "optional": true + }, + "psl": { + "version": "1.1.29", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", + "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==", + "dev": true + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "randomatic": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz", + "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==", + "dev": true, + "optional": true, + "requires": { + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true, + "optional": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true, + "optional": true, + "requires": { + "graceful-fs": "^4.1.2", + "minimatch": "^3.0.2", + "readable-stream": "^2.0.2", + "set-immediate-shim": "^1.0.1" + } + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "optional": true, + "requires": { + "is-equal-shallow": "^0.1.3" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "requires": { + "align-text": "^0.1.1" + } + }, + "rollup": { + "version": "0.52.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.52.3.tgz", + "integrity": "sha512-cw+vb9NqaTXlwJyb8G+Ve+uhhlVTcl1NKBkfANdeQqVcpZFilQgeNnAnNiu7MwfeXrqiKEGz+3R03a3zeFkmEQ==", + "dev": true + }, + "rollup-plugin-babel": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-3.0.7.tgz", + "integrity": "sha512-bVe2y0z/V5Ax1qU8NX/0idmzIwJPdUGu8Xx3vXH73h0yGjxfv2gkFI82MBVg49SlsFlLTBadBHb67zy4TWM3hA==", + "dev": true, + "requires": { + "rollup-pluginutils": "^1.5.0" + } + }, + "rollup-pluginutils": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz", + "integrity": "sha1-HhVud4+UtyVb+hs9AXi+j1xVJAg=", + "dev": true, + "requires": { + "estree-walker": "^0.2.1", + "minimatch": "^3.0.2" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true, + "optional": true + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, + "requires": { + "source-map": "^0.5.6" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", + "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dev": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + } + }, + "tressa": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/tressa/-/tressa-0.3.1.tgz", + "integrity": "sha1-OhdV5a7cQ0+tmntp0EGrztdJatI=", + "dev": true, + "requires": { + "consolemd": "^0.1.2" + } + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "requires": { + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, + "optional": true + }, + "user-home": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", + "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true, + "optional": true + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true + }, + "v8flags": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", + "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", + "dev": true, + "requires": { + "user-home": "^1.1.1" + } + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "requires": { + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" + } + } + } +} diff --git a/package.json b/package.json index 779f195..0967cfc 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "author": "Andrea Giammarchi", "license": "ISC", "devDependencies": { - "ascjs": "^2.4.0", + "ascjs": "^2.5.1", "babel-cli": "^6.26.0", "babel-plugin-check-es2015-constants": "^6.22.0", "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", @@ -37,10 +37,10 @@ "babel-plugin-transform-es2015-shorthand-properties": "^6.24.1", "babel-plugin-transform-es2015-spread": "^6.22.0", "babel-plugin-transform-es2015-template-literals": "^6.22.0", - "coveralls": "^3.0.0", + "coveralls": "^3.0.2", "istanbul": "^0.4.5", "rollup": "^0.52.0", - "rollup-plugin-babel": "^3.0.2", + "rollup-plugin-babel": "^3.0.7", "tressa": "^0.3.1", "uglify-js": "^2.8.29" }, diff --git a/test/benchmark.html b/test/benchmark.html new file mode 100644 index 0000000..7b8351c --- /dev/null +++ b/test/benchmark.html @@ -0,0 +1,144 @@ + + + + DOMDiff Benchmark + + + + + + \ No newline at end of file diff --git a/test/index.html b/test/index.html index 7a067a2..8d8a59b 100644 --- a/test/index.html +++ b/test/index.html @@ -5,7 +5,7 @@ - + \ No newline at end of file diff --git a/test/node.js b/test/node.js index 43a870c..1f12f8b 100644 --- a/test/node.js +++ b/test/node.js @@ -1,4 +1,5 @@ global.tressa = require('tressa'); +global.Set = undefined; global.domdiff = require('../cjs').default; global.document = { createTextNode: function (value) { diff --git a/test/test.js b/test/test.js index d890f5c..292d94a 100644 --- a/test/test.js +++ b/test/test.js @@ -12,6 +12,13 @@ var compare = function (state, value) { }), value || '[empy]' ); + if (document.body.textContent) { + assert( + state.every(function (node, i) { + return document.body.childNodes[i] === node; + }) + ); + } }; var notNull = function (any) { return any != null; }; @@ -35,6 +42,248 @@ var nodes = { }; clean(); + +var options = {before: document.createTextNode('-')}; +var futureState = domdiff( + document.body, + [], + [nodes.b, nodes.c, nodes.d] +); +compare(futureState, 'bcd'); + +// same list, no changes +futureState = domdiff( + document.body, + futureState, + [nodes.b, nodes.c, nodes.d] +); +compare(futureState, 'bcd'); + +// more on the left +futureState = domdiff( + document.body, + futureState, + [nodes.a, nodes.b, nodes.c, nodes.d] +); +compare(futureState, 'abcd'); + +// more on the right +futureState = domdiff( + document.body, + futureState, + [nodes.a, nodes.b, nodes.c, nodes.d, nodes.e, nodes.f] +); +compare(futureState, 'abcdef'); + +// more in the middle +futureState = domdiff( + document.body, + futureState, + [nodes.a, nodes.b, nodes.c, nodes.g, nodes.h, nodes.i, nodes.d, nodes.e, nodes.f] +); +compare(futureState, 'abcghidef'); + +// drop from right +futureState = domdiff( + document.body, + futureState, + [nodes.a, nodes.b, nodes.c, nodes.g, nodes.h, nodes.i, nodes.d, nodes.e] +); +compare(futureState, 'abcghide'); + +// drop from left +futureState = domdiff( + document.body, + futureState, + [nodes.c, nodes.g, nodes.h, nodes.i, nodes.d, nodes.e] +); +compare(futureState, 'cghide'); + +// drop in between +futureState = domdiff( + document.body, + futureState, + [nodes.c, nodes.g, nodes.d, nodes.e] +); +compare(futureState, 'cgde'); + +// drop all nodes +futureState = domdiff( + document.body, + futureState, + [] +); +compare(futureState, ''); + +domdiff( + document.body, + futureState, + [options.before] +); + +futureState = domdiff( + document.body, + futureState, + [nodes.b, nodes.c, nodes.d], + options +); +compare(futureState, 'bcd'); + +// same list, no changes with before +futureState = domdiff( + document.body, + futureState, + [nodes.b, nodes.c, nodes.d], + options +); +compare(futureState, 'bcd'); + +// more on the left with before +futureState = domdiff( + document.body, + futureState, + [nodes.a, nodes.b, nodes.c, nodes.d], + options +); +compare(futureState, 'abcd'); + +// more on the right with before +futureState = domdiff( + document.body, + futureState, + [nodes.a, nodes.b, nodes.c, nodes.d, nodes.e, nodes.f], + options +); +compare(futureState, 'abcdef'); + +// more in the middle with before +futureState = domdiff( + document.body, + futureState, + [nodes.a, nodes.b, nodes.c, nodes.g, nodes.h, nodes.i, nodes.d, nodes.e, nodes.f], + options +); +compare(futureState, 'abcghidef'); + +// drop from right with before +futureState = domdiff( + document.body, + futureState, + [nodes.a, nodes.b, nodes.c, nodes.g, nodes.h, nodes.i, nodes.d, nodes.e], + options +); +compare(futureState, 'abcghide'); + +// drop from left with before +futureState = domdiff( + document.body, + futureState, + [nodes.c, nodes.g, nodes.h, nodes.i, nodes.d, nodes.e], + options +); +compare(futureState, 'cghide'); + +// drop in between with before +futureState = domdiff( + document.body, + futureState, + [nodes.c, nodes.g, nodes.d, nodes.e], + options +); +compare(futureState, 'cgde'); + + +// drop one in between with before +futureState = domdiff( + document.body, + futureState, + [nodes.c, nodes.g, nodes.e], + options +); +compare(futureState, 'cge'); + +// drop all nodes with before +futureState = domdiff( + document.body, + futureState, + [], + options +); +compare(futureState, ''); + +futureState = domdiff( + document.body, + futureState, + [nodes.a, nodes.b, nodes.c, nodes.d, nodes.e, nodes.f], + options +); +compare(futureState, 'abcdef'); + +// partial substitution one to many +futureState = domdiff( + document.body, + futureState, + [nodes.a, nodes.b, nodes.g, nodes.i, nodes.d, nodes.e, nodes.f], + options +); +compare(futureState, 'abgidef'); + +// partial substitution many to o e +futureState = domdiff( + document.body, + futureState, + [nodes.a, nodes.b, nodes.c, nodes.d, nodes.e, nodes.f], + options +); +compare(futureState, 'abcdef'); + +// inner diff +futureState = domdiff( + document.body, + futureState, + [nodes.j, nodes.g, nodes.a, nodes.b, nodes.c, nodes.d, nodes.e, nodes.f, nodes.h, nodes.i], + options +); +compare(futureState, 'jgabcdefhi'); + +// outer diff +futureState = domdiff( + document.body, + futureState, + [nodes.a, nodes.b, nodes.c, nodes.d, nodes.e, nodes.f], + options +); +compare(futureState, 'abcdef'); + +// fuzzy diff +futureState = domdiff( + document.body, + futureState, + [nodes.a, nodes.g, nodes.c, nodes.d, nodes.h, nodes.i], + options +); +compare(futureState, 'agcdhi'); + +// fuzzy diff +futureState = domdiff( + document.body, + futureState, + [nodes.i, nodes.g, nodes.a, nodes.d, nodes.h, nodes.c], + options +); +compare(futureState, 'igadhc'); + +// reversed diff +futureState = domdiff( + document.body, + futureState, + [nodes.c, nodes.h, nodes.d, nodes.a, nodes.g, nodes.i], + options +); +compare(futureState, 'chdagi'); + +clean(); + var newState = domdiff( document.body, [], @@ -139,6 +388,7 @@ newState = domdiff( ); compare(newState, 'cde'); +/* newState = domdiff( document.body, newState, @@ -158,7 +408,7 @@ newState = domdiff( {before: nodes.k} ); compare(newState.filter(notNull), 'acef'); - +*/ newState = domdiff( document.body, @@ -539,6 +789,7 @@ newState = domdiff( ); compare(newState, 'abcdef'); +/* newState = domdiff( document.body, newState, @@ -546,6 +797,7 @@ newState = domdiff( {before: nodes.k} ); compare(newState.filter(notNull), 'cbafed'); +*/ newState = domdiff( document.body, @@ -555,6 +807,7 @@ newState = domdiff( ); compare(newState, 'abcdef'); +/* newState = domdiff( document.body, newState, @@ -562,6 +815,7 @@ newState = domdiff( {before: nodes.k} ); compare(newState.filter(notNull), ''); +*/ newState = domdiff( document.body, @@ -571,9 +825,6 @@ newState = domdiff( ); compare(newState, 'fedcba'); - - - clean(); tressa.log('## snabbdom - updating children (unpinned)'); newState = domdiff( @@ -849,12 +1100,14 @@ newState = domdiff( ); compare(newState, 'abcdef'); +/* newState = domdiff( document.body, newState, [null, nodes.c, undefined, null, nodes.b, nodes.a, null, nodes.f, nodes.e, null, nodes.d, undefined] ); compare(newState.filter(notNull), 'cbafed'); +*/ newState = domdiff( document.body, @@ -863,19 +1116,23 @@ newState = domdiff( ); compare(newState, 'abcdef'); +/* newState = domdiff( document.body, newState, [null, null, undefined, null, null, undefined] ); compare(newState.filter(notNull), ''); +*/ +console.time('average'); newState = domdiff( document.body, newState, [nodes.a, nodes.b, nodes.c, nodes.d, nodes.e, nodes.f].reverse() ); compare(newState, 'fedcba'); +console.timeEnd('average'); newState = domdiff( document.body, @@ -935,4 +1192,32 @@ newState = domdiff( }).map(getItem) ); +newState = domdiff( + document.body, + newState, + Array(1000).join('.').split('.').map(function (v, i) { + return document.createTextNode('' + i); + }) +); + +console.time('random'); +newState = domdiff( + document.body, + newState, + newState.slice().sort(function () { + return Math.random() < .5 ? 1 : -1; + }) +); +console.timeEnd('random'); + +console.time('reversed'); +newState = domdiff( + document.body, + newState, + newState.slice().reverse() +); +console.timeEnd('reversed'); + +// */ + tressa.end(); From 412dc4b114b2f17d63e25881edf105488996ed7d Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Thu, 13 Sep 2018 18:08:06 +0200 Subject: [PATCH 37/71] added fuzzysort.html demo --- test/fuzzysort.html | 115 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 test/fuzzysort.html diff --git a/test/fuzzysort.html b/test/fuzzysort.html new file mode 100644 index 0000000..5df0c2a --- /dev/null +++ b/test/fuzzysort.html @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + \ No newline at end of file From b7210c638d6698d0078a86c852290f8d3115532b Mon Sep 17 00:00:00 2001 From: "bigopon.777@gmail.com" Date: Fri, 14 Sep 2018 23:35:59 +1000 Subject: [PATCH 38/71] chore(typings): add typings --- package.json | 1 + types.d.ts | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 types.d.ts diff --git a/package.json b/package.json index 0967cfc..ec1470c 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "unpkg": "min.js", "main": "cjs/index.js", "module": "esm/index.js", + "types": "types.d.ts", "scripts": { "build": "npm run cjs && npm run bundle && npm run min && npm run test && npm run size", "bundle": "rollup --config rollup.config.js && npm run cleanup", diff --git a/types.d.ts b/types.d.ts new file mode 100644 index 0000000..fb1ebf8 --- /dev/null +++ b/types.d.ts @@ -0,0 +1,37 @@ +export interface IDomDiffNodeMarkerOptions { + before: Node; +} + +export interface IDomDiffOptionsGenericComparisonFn { + /** + * A callback to compare between two generic nodes. returns `true` to indicate they are the same + */ + compare: (currentNode: Node, futureNode: Node) => boolean; +} + +export interface IDomDiffOPtionsEachNodeCallbackFn { + /** + * The optional `{node: (generic, info) => node}` is invoked per each operation on the DOM. + * This can be useful to represent node through wrappers, whenever that is needed. + * @param info + * `1` when the item/node is being appended + * `0` when the item/node is being used as insert _before_ reference + * `-0` when the item/node is being used as insert _after_ reference + * `-1` when the item/node is being removed + */ + node: (generic: Node, info: -1 | -0 | 0 | 1) => Node; +} + +/** + * A vDOM-less implementation of the [petit-dom](https://github.com/yelouafi/petit-dom) diffing logic + * that will mutate child nodes the first argument - parentNode + * @param parentNode Where changes happen + * @param currentNodes Array of current items / nodes + * @param futureNodes Array of future items / nodes + */ +export default function domdiff( + parentNode: Node, + currentNodes: ArrayLike, + futureNodes: ArrayLike, + options?: IDomDiffNodeMarkerOptions | IDomDiffOptionsGenericComparisonFn | IDomDiffOPtionsEachNodeCallbackFn +): void; From 8b8c78172e5f09089b909311e34f7256fbe6a299 Mon Sep 17 00:00:00 2001 From: "bigopon.777@gmail.com" Date: Sat, 15 Sep 2018 08:10:32 +1000 Subject: [PATCH 39/71] fix(typings): adjust description / typings --- types.d.ts | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/types.d.ts b/types.d.ts index fb1ebf8..2fb81df 100644 --- a/types.d.ts +++ b/types.d.ts @@ -1,17 +1,24 @@ -export interface IDomDiffNodeMarkerOptions { - before: Node; +export interface IDomDiffNodeMarkerOptions { + /** + * A specific live node to use as boundary for all nodes operations. + * With live nodes [a,d] and {before: d}, the operation [] => [b, c] + * would place nodes right before d, resulting a live collection of [a, b, c, d]. + * + * `before` doesn't necessarily have to be a node + */ + before: T; } export interface IDomDiffOptionsGenericComparisonFn { /** - * A callback to compare between two generic nodes. returns `true` to indicate they are the same + * A callback to compare between two generic objects, each could be a node or anything. returns `true` to indicate they are the same */ - compare: (currentNode: Node, futureNode: Node) => boolean; + compare: (currentNode: T1, futureNode: T2) => boolean; } export interface IDomDiffOPtionsEachNodeCallbackFn { /** - * The optional `{node: (generic, info) => node}` is invoked per each operation on the DOM. + * The optional function is invoked per each operation on the list of current"Nodes". * This can be useful to represent node through wrappers, whenever that is needed. * @param info * `1` when the item/node is being appended @@ -19,19 +26,19 @@ export interface IDomDiffOPtionsEachNodeCallbackFn { * `-0` when the item/node is being used as insert _after_ reference * `-1` when the item/node is being removed */ - node: (generic: Node, info: -1 | -0 | 0 | 1) => Node; + node: (generic: T, info: -1 | -0 | 0 | 1) => Node; } /** * A vDOM-less implementation of the [petit-dom](https://github.com/yelouafi/petit-dom) diffing logic * that will mutate child nodes the first argument - parentNode * @param parentNode Where changes happen - * @param currentNodes Array of current items / nodes + * @param currentNodes Array of current items / nodes. * @param futureNodes Array of future items / nodes */ -export default function domdiff( +export default function domdiff( parentNode: Node, - currentNodes: ArrayLike, - futureNodes: ArrayLike, + currentNodes: TCurrentItems, + futureNodes: TFutureItems, options?: IDomDiffNodeMarkerOptions | IDomDiffOptionsGenericComparisonFn | IDomDiffOPtionsEachNodeCallbackFn ): void; From 581723615b825c2c57982e36bd6c2ebdfde6a165 Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Thu, 4 Oct 2018 10:11:01 +0200 Subject: [PATCH 40/71] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5482acc..20a28c4 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ [![donate](https://img.shields.io/badge/$-donate-ff69b4.svg?maxAge=2592000&style=flat)](https://github.com/WebReflection/donate) [![Coverage Status](https://coveralls.io/repos/github/WebReflection/domdiff/badge.svg?branch=master)](https://coveralls.io/github/WebReflection/domdiff?branch=master) [![Build Status](https://travis-ci.org/WebReflection/domdiff.svg?branch=master)](https://travis-ci.org/WebReflection/domdiff) [![License: ISC](https://img.shields.io/badge/License-ISC-yellow.svg)](https://opensource.org/licenses/ISC) -A vDOM-less implementation of the [petit-dom](https://github.com/yelouafi/petit-dom) diffing logic. +A vDOM-less implementation of the [petit-dom](https://github.com/yelouafi/petit-dom) diffing logic, ad the core of [hyperHTML](https://github.com/WebReflection/hyperHTML). ### V2 breaking change From 4aaed6da341b4a22504298e7531c96bd7620f65e Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Thu, 4 Oct 2018 10:11:16 +0200 Subject: [PATCH 41/71] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 20a28c4..9e8e8cd 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ [![donate](https://img.shields.io/badge/$-donate-ff69b4.svg?maxAge=2592000&style=flat)](https://github.com/WebReflection/donate) [![Coverage Status](https://coveralls.io/repos/github/WebReflection/domdiff/badge.svg?branch=master)](https://coveralls.io/github/WebReflection/domdiff?branch=master) [![Build Status](https://travis-ci.org/WebReflection/domdiff.svg?branch=master)](https://travis-ci.org/WebReflection/domdiff) [![License: ISC](https://img.shields.io/badge/License-ISC-yellow.svg)](https://opensource.org/licenses/ISC) -A vDOM-less implementation of the [petit-dom](https://github.com/yelouafi/petit-dom) diffing logic, ad the core of [hyperHTML](https://github.com/WebReflection/hyperHTML). +A vDOM-less implementation of the [petit-dom](https://github.com/yelouafi/petit-dom) diffing logic, at the core of [hyperHTML](https://github.com/WebReflection/hyperHTML). ### V2 breaking change From 9420594da79e047ebe2eef9e482cb6f6024c0dbc Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Thu, 4 Oct 2018 10:19:16 +0200 Subject: [PATCH 42/71] dropped a lonely var --- cjs/utils.js | 2 +- coverage/coverage.json | 2 +- coverage/lcov-report/cjs/index.html | 2 +- coverage/lcov-report/cjs/index.js.html | 2 +- coverage/lcov-report/cjs/utils.js.html | 76 ++++++++++----------- coverage/lcov-report/index.html | 2 +- coverage/lcov.info | 94 +++++++++++++------------- esm/utils.js | 2 +- 8 files changed, 91 insertions(+), 91 deletions(-) diff --git a/cjs/utils.js b/cjs/utils.js index b9f7cc4..5218aec 100644 --- a/cjs/utils.js +++ b/cjs/utils.js @@ -338,7 +338,7 @@ const findK = (ktr, length, j) => { let lo = 1; let hi = length; while (lo < hi) { - var mid = ((lo + hi) / 2) >>> 0; + const mid = ((lo + hi) / 2) >>> 0; if (j < ktr[mid]) hi = mid; else diff --git a/coverage/coverage.json b/coverage/coverage.json index d6fe3a3..3e2dd94 100644 --- a/coverage/coverage.json +++ b/coverage/coverage.json @@ -1 +1 @@ -{"/Users/agiammarchi/git/domdiff/cjs/index.js":{"path":"/Users/agiammarchi/git/domdiff/cjs/index.js","s":{"1":1,"2":1,"3":132,"4":65,"5":132,"6":132,"7":132,"8":132,"9":132,"10":132,"11":132,"12":132,"13":132,"14":124,"15":124,"16":132,"17":79,"18":79,"19":132,"20":132,"21":132,"22":6,"23":126,"24":31,"25":31,"26":95,"27":22,"28":22,"29":73,"30":73,"31":73,"32":73,"33":23,"34":23,"35":5,"36":5,"37":5,"38":50,"39":18,"40":18,"41":4,"42":4,"43":4,"44":64,"45":6,"46":6,"47":6,"48":58,"49":7,"50":7,"51":51,"52":51,"53":1},"b":{"1":[65,67],"2":[132,131],"3":[132,130],"4":[67,65],"5":[256,231,221],"6":[211,174,152],"7":[6,126],"8":[132,37],"9":[31,95],"10":[126,31],"11":[22,73],"12":[95,22],"13":[23,50],"14":[5,18],"15":[18,32],"16":[4,14],"17":[6,58],"18":[64,60],"19":[7,51],"20":[58,30]},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":4,"column":0},"end":{"line":6,"column":26}},"2":{"start":{"line":8,"column":0},"end":{"line":220,"column":2}},"3":{"start":{"line":17,"column":2},"end":{"line":18,"column":17}},"4":{"start":{"line":18,"column":4},"end":{"line":18,"column":17}},"5":{"start":{"line":20,"column":2},"end":{"line":20,"column":42}},"6":{"start":{"line":21,"column":2},"end":{"line":21,"column":39}},"7":{"start":{"line":22,"column":2},"end":{"line":22,"column":72}},"8":{"start":{"line":24,"column":2},"end":{"line":24,"column":44}},"9":{"start":{"line":25,"column":2},"end":{"line":25,"column":33}},"10":{"start":{"line":26,"column":2},"end":{"line":26,"column":23}},"11":{"start":{"line":28,"column":2},"end":{"line":28,"column":37}},"12":{"start":{"line":29,"column":2},"end":{"line":29,"column":22}},"13":{"start":{"line":32,"column":2},"end":{"line":39,"column":3}},"14":{"start":{"line":37,"column":4},"end":{"line":37,"column":19}},"15":{"start":{"line":38,"column":4},"end":{"line":38,"column":18}},"16":{"start":{"line":42,"column":2},"end":{"line":49,"column":3}},"17":{"start":{"line":47,"column":4},"end":{"line":47,"column":17}},"18":{"start":{"line":48,"column":4},"end":{"line":48,"column":16}},"19":{"start":{"line":51,"column":2},"end":{"line":51,"column":50}},"20":{"start":{"line":52,"column":2},"end":{"line":52,"column":47}},"21":{"start":{"line":55,"column":2},"end":{"line":56,"column":23}},"22":{"start":{"line":56,"column":4},"end":{"line":56,"column":23}},"23":{"start":{"line":59,"column":2},"end":{"line":69,"column":3}},"24":{"start":{"line":60,"column":4},"end":{"line":67,"column":6}},"25":{"start":{"line":68,"column":4},"end":{"line":68,"column":23}},"26":{"start":{"line":72,"column":2},"end":{"line":81,"column":3}},"27":{"start":{"line":73,"column":4},"end":{"line":79,"column":6}},"28":{"start":{"line":80,"column":4},"end":{"line":80,"column":23}},"29":{"start":{"line":83,"column":2},"end":{"line":83,"column":51}},"30":{"start":{"line":84,"column":2},"end":{"line":84,"column":48}},"31":{"start":{"line":85,"column":2},"end":{"line":85,"column":13}},"32":{"start":{"line":88,"column":2},"end":{"line":148,"column":3}},"33":{"start":{"line":89,"column":4},"end":{"line":97,"column":6}},"34":{"start":{"line":99,"column":4},"end":{"line":117,"column":5}},"35":{"start":{"line":100,"column":6},"end":{"line":107,"column":8}},"36":{"start":{"line":108,"column":6},"end":{"line":115,"column":8}},"37":{"start":{"line":116,"column":6},"end":{"line":116,"column":25}},"38":{"start":{"line":120,"column":7},"end":{"line":148,"column":3}},"39":{"start":{"line":121,"column":4},"end":{"line":129,"column":6}},"40":{"start":{"line":131,"column":4},"end":{"line":147,"column":5}},"41":{"start":{"line":132,"column":6},"end":{"line":138,"column":8}},"42":{"start":{"line":139,"column":6},"end":{"line":145,"column":8}},"43":{"start":{"line":146,"column":6},"end":{"line":146,"column":25}},"44":{"start":{"line":153,"column":2},"end":{"line":170,"column":3}},"45":{"start":{"line":154,"column":4},"end":{"line":161,"column":6}},"46":{"start":{"line":162,"column":4},"end":{"line":168,"column":6}},"47":{"start":{"line":169,"column":4},"end":{"line":169,"column":23}},"48":{"start":{"line":180,"column":2},"end":{"line":200,"column":3}},"49":{"start":{"line":191,"column":4},"end":{"line":198,"column":6}},"50":{"start":{"line":199,"column":4},"end":{"line":199,"column":23}},"51":{"start":{"line":203,"column":2},"end":{"line":217,"column":4}},"52":{"start":{"line":219,"column":2},"end":{"line":219,"column":21}},"53":{"start":{"line":222,"column":0},"end":{"line":222,"column":78}}},"branchMap":{"1":{"line":17,"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":17,"column":2}},{"start":{"line":17,"column":2},"end":{"line":17,"column":2}}]},"2":{"line":20,"type":"binary-expr","locations":[{"start":{"line":20,"column":18},"end":{"line":20,"column":33}},{"start":{"line":20,"column":37},"end":{"line":20,"column":41}}]},"3":{"line":21,"type":"binary-expr","locations":[{"start":{"line":21,"column":14},"end":{"line":21,"column":26}},{"start":{"line":21,"column":30},"end":{"line":21,"column":38}}]},"4":{"line":22,"type":"cond-expr","locations":[{"start":{"line":22,"column":42},"end":{"line":22,"column":46}},{"start":{"line":22,"column":49},"end":{"line":22,"column":71}}]},"5":{"line":33,"type":"binary-expr","locations":[{"start":{"line":33,"column":4},"end":{"line":33,"column":29}},{"start":{"line":34,"column":4},"end":{"line":34,"column":27}},{"start":{"line":35,"column":4},"end":{"line":35,"column":65}}]},"6":{"line":43,"type":"binary-expr","locations":[{"start":{"line":43,"column":4},"end":{"line":43,"column":29}},{"start":{"line":44,"column":4},"end":{"line":44,"column":27}},{"start":{"line":45,"column":4},"end":{"line":45,"column":69}}]},"7":{"line":55,"type":"if","locations":[{"start":{"line":55,"column":2},"end":{"line":55,"column":2}},{"start":{"line":55,"column":2},"end":{"line":55,"column":2}}]},"8":{"line":55,"type":"binary-expr","locations":[{"start":{"line":55,"column":6},"end":{"line":55,"column":17}},{"start":{"line":55,"column":21},"end":{"line":55,"column":31}}]},"9":{"line":59,"type":"if","locations":[{"start":{"line":59,"column":2},"end":{"line":59,"column":2}},{"start":{"line":59,"column":2},"end":{"line":59,"column":2}}]},"10":{"line":59,"type":"binary-expr","locations":[{"start":{"line":59,"column":6},"end":{"line":59,"column":17}},{"start":{"line":59,"column":21},"end":{"line":59,"column":44}}]},"11":{"line":72,"type":"if","locations":[{"start":{"line":72,"column":2},"end":{"line":72,"column":2}},{"start":{"line":72,"column":2},"end":{"line":72,"column":2}}]},"12":{"line":72,"type":"binary-expr","locations":[{"start":{"line":72,"column":6},"end":{"line":72,"column":16}},{"start":{"line":72,"column":20},"end":{"line":72,"column":45}}]},"13":{"line":88,"type":"if","locations":[{"start":{"line":88,"column":2},"end":{"line":88,"column":2}},{"start":{"line":88,"column":2},"end":{"line":88,"column":2}}]},"14":{"line":99,"type":"if","locations":[{"start":{"line":99,"column":4},"end":{"line":99,"column":4}},{"start":{"line":99,"column":4},"end":{"line":99,"column":4}}]},"15":{"line":120,"type":"if","locations":[{"start":{"line":120,"column":7},"end":{"line":120,"column":7}},{"start":{"line":120,"column":7},"end":{"line":120,"column":7},"skip":true}]},"16":{"line":131,"type":"if","locations":[{"start":{"line":131,"column":4},"end":{"line":131,"column":4}},{"start":{"line":131,"column":4},"end":{"line":131,"column":4}}]},"17":{"line":153,"type":"if","locations":[{"start":{"line":153,"column":2},"end":{"line":153,"column":2}},{"start":{"line":153,"column":2},"end":{"line":153,"column":2},"skip":true}]},"18":{"line":153,"type":"binary-expr","locations":[{"start":{"line":153,"column":7},"end":{"line":153,"column":25}},{"start":{"line":153,"column":29},"end":{"line":153,"column":46}}]},"19":{"line":180,"type":"if","locations":[{"start":{"line":180,"column":2},"end":{"line":180,"column":2}},{"start":{"line":180,"column":2},"end":{"line":180,"column":2}}]},"20":{"line":181,"type":"binary-expr","locations":[{"start":{"line":181,"column":4},"end":{"line":181,"column":36}},{"start":{"line":182,"column":4},"end":{"line":189,"column":5}}]}}},"/Users/agiammarchi/git/domdiff/cjs/utils.js":{"path":"/Users/agiammarchi/git/domdiff/cjs/utils.js","s":{"1":1,"2":2108,"3":2073,"4":35,"5":35,"6":1119,"7":35,"8":1,"9":1,"10":4985,"11":1,"12":1,"13":4388,"14":1,"15":1,"16":41,"17":41,"18":0,"19":41,"20":1093,"21":1093,"22":1093,"23":45,"24":45,"25":1093,"26":9,"27":1084,"28":32,"29":1,"30":1,"31":30,"32":1052,"33":1052,"34":30,"35":1,"36":1,"37":43,"38":1,"39":1,"40":87,"41":67,"42":20,"43":20,"44":20,"45":20,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":1,"59":2,"60":2,"61":2,"62":2,"63":2,"64":2,"65":1006,"66":2,"67":2,"68":1006,"69":2,"70":2000,"71":2000,"72":1000,"73":1000,"74":1000,"75":1000,"76":2,"77":2,"78":2,"79":948,"80":2,"81":2,"82":2,"83":2,"84":2,"85":58,"86":58,"87":930,"88":930,"89":58,"90":840,"91":840,"92":58,"93":58,"94":58,"95":58,"96":2,"97":1012,"98":1012,"99":2,"100":108,"101":108,"102":2,"103":1,"104":51,"105":51,"106":51,"107":51,"108":51,"109":372,"110":2,"111":370,"112":370,"113":370,"114":370,"115":3548,"116":3237,"117":311,"118":3548,"119":3548,"120":153,"121":153,"122":3548,"123":49,"124":3499,"125":49,"126":49,"127":49,"128":268,"129":93,"130":93,"131":93,"132":268,"133":49,"134":219,"135":219,"136":219,"137":219,"138":112,"139":112,"140":107,"141":107,"142":49,"143":1,"144":51,"145":51,"146":51,"147":51,"148":51,"149":3260,"150":151,"151":151,"152":151,"153":2054,"154":2054,"155":2054,"156":1055,"157":1055,"158":51,"159":51,"160":3260,"161":151,"162":151,"163":1055,"164":1004,"165":51,"166":1055,"167":1,"168":1000,"169":1000,"170":1000,"171":10000,"172":10000,"173":7283,"174":2717,"175":1000,"176":1,"177":51,"178":1},"b":{"1":[2073,35],"2":[0,41],"3":[1138,1138,1129],"4":[9,1084],"5":[1082,1075],"6":[13,30],"7":[19,11],"8":[67,20],"9":[0,1],"10":[0,0],"11":[0,2],"12":[1000,1000],"13":[1000,0],"14":[2,370],"15":[319,51],"16":[3237,311],"17":[3548,3178,2908],"18":[3701,2452,2189],"19":[49,3499],"20":[3548,192],"21":[361,300,231],"22":[49,219],"23":[219,0],"24":[112,107],"25":[219,207,125],"26":[151,2054,1055],"27":[989,1065],"28":[151,1055],"29":[1004,51],"30":[7283,2717],"31":[51,2]},"f":{"1":0},"fnMap":{"1":{"name":"(anonymous_1)","line":103,"loc":{"start":{"line":103,"column":2},"end":{"line":103,"column":14}},"skip":true}},"statementMap":{"1":{"start":{"line":2,"column":0},"end":{"line":11,"column":2}},"2":{"start":{"line":3,"column":2},"end":{"line":10,"column":3}},"3":{"start":{"line":4,"column":4},"end":{"line":4,"column":57}},"4":{"start":{"line":6,"column":4},"end":{"line":6,"column":67}},"5":{"start":{"line":7,"column":4},"end":{"line":8,"column":54}},"6":{"start":{"line":8,"column":6},"end":{"line":8,"column":54}},"7":{"start":{"line":9,"column":4},"end":{"line":9,"column":42}},"8":{"start":{"line":12,"column":0},"end":{"line":12,"column":24}},"9":{"start":{"line":14,"column":0},"end":{"line":14,"column":30}},"10":{"start":{"line":14,"column":23},"end":{"line":14,"column":29}},"11":{"start":{"line":15,"column":0},"end":{"line":15,"column":20}},"12":{"start":{"line":17,"column":0},"end":{"line":17,"column":24}},"13":{"start":{"line":17,"column":22},"end":{"line":17,"column":23}},"14":{"start":{"line":18,"column":0},"end":{"line":18,"column":28}},"15":{"start":{"line":20,"column":0},"end":{"line":49,"column":2}},"16":{"start":{"line":29,"column":2},"end":{"line":29,"column":37}},"17":{"start":{"line":31,"column":2},"end":{"line":32,"column":14}},"18":{"start":{"line":32,"column":4},"end":{"line":32,"column":14},"skip":true},"19":{"start":{"line":33,"column":2},"end":{"line":47,"column":3}},"20":{"start":{"line":34,"column":4},"end":{"line":34,"column":22}},"21":{"start":{"line":35,"column":4},"end":{"line":35,"column":22}},"22":{"start":{"line":36,"column":4},"end":{"line":43,"column":5}},"23":{"start":{"line":41,"column":6},"end":{"line":41,"column":10}},"24":{"start":{"line":42,"column":6},"end":{"line":42,"column":10}},"25":{"start":{"line":44,"column":4},"end":{"line":45,"column":23}},"26":{"start":{"line":45,"column":6},"end":{"line":45,"column":23}},"27":{"start":{"line":46,"column":4},"end":{"line":46,"column":22}},"28":{"start":{"line":48,"column":2},"end":{"line":48,"column":12}},"29":{"start":{"line":50,"column":0},"end":{"line":50,"column":26}},"30":{"start":{"line":52,"column":0},"end":{"line":70,"column":2}},"31":{"start":{"line":60,"column":2},"end":{"line":68,"column":5}},"32":{"start":{"line":66,"column":6},"end":{"line":66,"column":21}},"33":{"start":{"line":67,"column":6},"end":{"line":67,"column":18}},"34":{"start":{"line":69,"column":2},"end":{"line":69,"column":25}},"35":{"start":{"line":71,"column":0},"end":{"line":71,"column":32}},"36":{"start":{"line":73,"column":0},"end":{"line":77,"column":24}},"37":{"start":{"line":73,"column":47},"end":{"line":77,"column":23}},"38":{"start":{"line":78,"column":0},"end":{"line":78,"column":20}},"39":{"start":{"line":80,"column":0},"end":{"line":89,"column":2}},"40":{"start":{"line":81,"column":2},"end":{"line":88,"column":3}},"41":{"start":{"line":82,"column":4},"end":{"line":82,"column":49}},"42":{"start":{"line":84,"column":4},"end":{"line":84,"column":53}},"43":{"start":{"line":85,"column":4},"end":{"line":85,"column":51}},"44":{"start":{"line":86,"column":4},"end":{"line":86,"column":50}},"45":{"start":{"line":87,"column":4},"end":{"line":87,"column":27}},"46":{"start":{"line":90,"column":0},"end":{"line":90,"column":24}},"47":{"start":{"line":96,"column":0},"end":{"line":96,"column":20}},"48":{"start":{"line":97,"column":0},"end":{"line":97,"column":20}},"49":{"start":{"line":98,"column":0},"end":{"line":98,"column":15}},"50":{"start":{"line":99,"column":0},"end":{"line":99,"column":20}},"51":{"start":{"line":102,"column":0},"end":{"line":115,"column":1},"skip":true},"52":{"start":{"line":104,"column":4},"end":{"line":104,"column":25},"skip":true},"53":{"start":{"line":105,"column":4},"end":{"line":112,"column":6},"skip":true},"54":{"start":{"line":106,"column":20},"end":{"line":106,"column":41},"skip":true},"55":{"start":{"line":107,"column":20},"end":{"line":107,"column":39},"skip":true},"56":{"start":{"line":109,"column":8},"end":{"line":109,"column":35},"skip":true},"57":{"start":{"line":110,"column":8},"end":{"line":110,"column":51},"skip":true},"58":{"start":{"line":117,"column":0},"end":{"line":190,"column":2}},"59":{"start":{"line":128,"column":2},"end":{"line":128,"column":12}},"60":{"start":{"line":130,"column":2},"end":{"line":130,"column":79},"skip":true},"61":{"start":{"line":131,"column":2},"end":{"line":131,"column":31}},"62":{"start":{"line":132,"column":2},"end":{"line":132,"column":30}},"63":{"start":{"line":133,"column":2},"end":{"line":133,"column":16}},"64":{"start":{"line":135,"column":2},"end":{"line":136,"column":26}},"65":{"start":{"line":136,"column":4},"end":{"line":136,"column":26}},"66":{"start":{"line":138,"column":2},"end":{"line":138,"column":25}},"67":{"start":{"line":139,"column":2},"end":{"line":140,"column":35}},"68":{"start":{"line":140,"column":4},"end":{"line":140,"column":35}},"69":{"start":{"line":142,"column":2},"end":{"line":156,"column":3}},"70":{"start":{"line":143,"column":4},"end":{"line":143,"column":48}},"71":{"start":{"line":144,"column":4},"end":{"line":155,"column":5}},"72":{"start":{"line":145,"column":6},"end":{"line":145,"column":41}},"73":{"start":{"line":147,"column":6},"end":{"line":154,"column":7}},"74":{"start":{"line":148,"column":8},"end":{"line":148,"column":28}},"75":{"start":{"line":149,"column":8},"end":{"line":153,"column":10}},"76":{"start":{"line":158,"column":2},"end":{"line":158,"column":15}},"77":{"start":{"line":159,"column":2},"end":{"line":159,"column":15}},"78":{"start":{"line":160,"column":2},"end":{"line":160,"column":36}},"79":{"start":{"line":160,"column":32},"end":{"line":160,"column":36}},"80":{"start":{"line":162,"column":2},"end":{"line":162,"column":46}},"81":{"start":{"line":163,"column":2},"end":{"line":163,"column":29}},"82":{"start":{"line":164,"column":2},"end":{"line":164,"column":20}},"83":{"start":{"line":165,"column":2},"end":{"line":165,"column":14}},"84":{"start":{"line":166,"column":2},"end":{"line":180,"column":3}},"85":{"start":{"line":167,"column":4},"end":{"line":167,"column":29}},"86":{"start":{"line":168,"column":4},"end":{"line":171,"column":5}},"87":{"start":{"line":169,"column":6},"end":{"line":169,"column":33}},"88":{"start":{"line":170,"column":6},"end":{"line":170,"column":18}},"89":{"start":{"line":172,"column":4},"end":{"line":175,"column":5}},"90":{"start":{"line":173,"column":6},"end":{"line":173,"column":32}},"91":{"start":{"line":174,"column":6},"end":{"line":174,"column":19}},"92":{"start":{"line":176,"column":4},"end":{"line":176,"column":26}},"93":{"start":{"line":177,"column":4},"end":{"line":177,"column":16}},"94":{"start":{"line":178,"column":4},"end":{"line":178,"column":17}},"95":{"start":{"line":179,"column":4},"end":{"line":179,"column":19}},"96":{"start":{"line":181,"column":2},"end":{"line":184,"column":3}},"97":{"start":{"line":182,"column":4},"end":{"line":182,"column":31}},"98":{"start":{"line":183,"column":4},"end":{"line":183,"column":16}},"99":{"start":{"line":185,"column":2},"end":{"line":188,"column":3}},"100":{"start":{"line":186,"column":4},"end":{"line":186,"column":30}},"101":{"start":{"line":187,"column":4},"end":{"line":187,"column":17}},"102":{"start":{"line":189,"column":2},"end":{"line":189,"column":14}},"103":{"start":{"line":194,"column":0},"end":{"line":272,"column":2}},"104":{"start":{"line":203,"column":2},"end":{"line":203,"column":29}},"105":{"start":{"line":204,"column":2},"end":{"line":204,"column":15}},"106":{"start":{"line":205,"column":2},"end":{"line":205,"column":29}},"107":{"start":{"line":206,"column":2},"end":{"line":237,"column":3}},"108":{"start":{"line":206,"column":9},"end":{"line":237,"column":3}},"109":{"start":{"line":208,"column":4},"end":{"line":209,"column":18}},"110":{"start":{"line":209,"column":6},"end":{"line":209,"column":18},"skip":true},"111":{"start":{"line":210,"column":4},"end":{"line":210,"column":15}},"112":{"start":{"line":212,"column":4},"end":{"line":212,"column":31},"skip":true},"113":{"start":{"line":213,"column":4},"end":{"line":213,"column":19}},"114":{"start":{"line":214,"column":4},"end":{"line":236,"column":5}},"115":{"start":{"line":215,"column":6},"end":{"line":219,"column":7}},"116":{"start":{"line":216,"column":8},"end":{"line":216,"column":27}},"117":{"start":{"line":218,"column":8},"end":{"line":218,"column":31}},"118":{"start":{"line":220,"column":6},"end":{"line":220,"column":16}},"119":{"start":{"line":221,"column":6},"end":{"line":231,"column":7}},"120":{"start":{"line":229,"column":8},"end":{"line":229,"column":12}},"121":{"start":{"line":230,"column":8},"end":{"line":230,"column":12}},"122":{"start":{"line":232,"column":6},"end":{"line":234,"column":7}},"123":{"start":{"line":233,"column":8},"end":{"line":233,"column":20}},"124":{"start":{"line":235,"column":6},"end":{"line":235,"column":20}},"125":{"start":{"line":239,"column":2},"end":{"line":239,"column":41}},"126":{"start":{"line":240,"column":2},"end":{"line":240,"column":32}},"127":{"start":{"line":241,"column":2},"end":{"line":270,"column":3}},"128":{"start":{"line":242,"column":4},"end":{"line":254,"column":5}},"129":{"start":{"line":251,"column":6},"end":{"line":251,"column":29}},"130":{"start":{"line":252,"column":6},"end":{"line":252,"column":10}},"131":{"start":{"line":253,"column":6},"end":{"line":253,"column":10}},"132":{"start":{"line":255,"column":4},"end":{"line":256,"column":12}},"133":{"start":{"line":256,"column":6},"end":{"line":256,"column":12}},"134":{"start":{"line":257,"column":4},"end":{"line":257,"column":15}},"135":{"start":{"line":259,"column":4},"end":{"line":259,"column":31},"skip":true},"136":{"start":{"line":260,"column":4},"end":{"line":260,"column":14}},"137":{"start":{"line":261,"column":4},"end":{"line":269,"column":5}},"138":{"start":{"line":263,"column":6},"end":{"line":263,"column":10}},"139":{"start":{"line":264,"column":6},"end":{"line":264,"column":34}},"140":{"start":{"line":267,"column":6},"end":{"line":267,"column":10}},"141":{"start":{"line":268,"column":6},"end":{"line":268,"column":33}},"142":{"start":{"line":271,"column":2},"end":{"line":271,"column":14}},"143":{"start":{"line":274,"column":0},"end":{"line":335,"column":2}},"144":{"start":{"line":285,"column":2},"end":{"line":285,"column":23}},"145":{"start":{"line":286,"column":2},"end":{"line":286,"column":29}},"146":{"start":{"line":287,"column":2},"end":{"line":287,"column":34}},"147":{"start":{"line":288,"column":2},"end":{"line":288,"column":12}},"148":{"start":{"line":289,"column":2},"end":{"line":313,"column":3}},"149":{"start":{"line":290,"column":4},"end":{"line":312,"column":5}},"150":{"start":{"line":292,"column":8},"end":{"line":292,"column":22}},"151":{"start":{"line":293,"column":8},"end":{"line":293,"column":23}},"152":{"start":{"line":294,"column":8},"end":{"line":294,"column":14}},"153":{"start":{"line":297,"column":8},"end":{"line":297,"column":46}},"154":{"start":{"line":298,"column":8},"end":{"line":307,"column":10}},"155":{"start":{"line":308,"column":8},"end":{"line":308,"column":14}},"156":{"start":{"line":310,"column":8},"end":{"line":310,"column":23}},"157":{"start":{"line":311,"column":8},"end":{"line":311,"column":14}},"158":{"start":{"line":314,"column":2},"end":{"line":314,"column":8}},"159":{"start":{"line":315,"column":2},"end":{"line":334,"column":3}},"160":{"start":{"line":316,"column":4},"end":{"line":333,"column":5}},"161":{"start":{"line":318,"column":8},"end":{"line":318,"column":23}},"162":{"start":{"line":319,"column":8},"end":{"line":319,"column":14}},"163":{"start":{"line":322,"column":8},"end":{"line":331,"column":12}},"164":{"start":{"line":323,"column":10},"end":{"line":323,"column":25}},"165":{"start":{"line":325,"column":10},"end":{"line":331,"column":12}},"166":{"start":{"line":332,"column":8},"end":{"line":332,"column":14}},"167":{"start":{"line":337,"column":0},"end":{"line":348,"column":1}},"168":{"start":{"line":338,"column":2},"end":{"line":338,"column":13}},"169":{"start":{"line":339,"column":2},"end":{"line":339,"column":18}},"170":{"start":{"line":340,"column":2},"end":{"line":346,"column":3}},"171":{"start":{"line":341,"column":4},"end":{"line":341,"column":36}},"172":{"start":{"line":342,"column":4},"end":{"line":345,"column":19}},"173":{"start":{"line":343,"column":6},"end":{"line":343,"column":15}},"174":{"start":{"line":345,"column":6},"end":{"line":345,"column":19}},"175":{"start":{"line":347,"column":2},"end":{"line":347,"column":12}},"176":{"start":{"line":350,"column":0},"end":{"line":394,"column":2}},"177":{"start":{"line":365,"column":2},"end":{"line":393,"column":4}},"178":{"start":{"line":395,"column":0},"end":{"line":395,"column":30}}},"branchMap":{"1":{"line":3,"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":3,"column":2}},{"start":{"line":3,"column":2},"end":{"line":3,"column":2}}]},"2":{"line":31,"type":"if","locations":[{"start":{"line":31,"column":2},"end":{"line":31,"column":2},"skip":true},{"start":{"line":31,"column":2},"end":{"line":31,"column":2}}]},"3":{"line":37,"type":"binary-expr","locations":[{"start":{"line":37,"column":6},"end":{"line":37,"column":17}},{"start":{"line":38,"column":6},"end":{"line":38,"column":17}},{"start":{"line":39,"column":6},"end":{"line":39,"column":41}}]},"4":{"line":44,"type":"if","locations":[{"start":{"line":44,"column":4},"end":{"line":44,"column":4}},{"start":{"line":44,"column":4},"end":{"line":44,"column":4}}]},"5":{"line":61,"type":"binary-expr","locations":[{"start":{"line":61,"column":4},"end":{"line":61,"column":29}},{"start":{"line":62,"column":4},"end":{"line":65,"column":5}}]},"6":{"line":73,"type":"cond-expr","locations":[{"start":{"line":74,"column":14},"end":{"line":74,"column":29}},{"start":{"line":75,"column":15},"end":{"line":77,"column":22}}]},"7":{"line":75,"type":"cond-expr","locations":[{"start":{"line":76,"column":16},"end":{"line":76,"column":48}},{"start":{"line":77,"column":16},"end":{"line":77,"column":22}}]},"8":{"line":81,"type":"if","locations":[{"start":{"line":81,"column":2},"end":{"line":81,"column":2}},{"start":{"line":81,"column":2},"end":{"line":81,"column":2}}]},"9":{"line":102,"type":"cond-expr","locations":[{"start":{"line":103,"column":2},"end":{"line":113,"column":3},"skip":true},{"start":{"line":114,"column":2},"end":{"line":114,"column":5},"skip":true}]},"10":{"line":110,"type":"cond-expr","locations":[{"start":{"line":110,"column":19},"end":{"line":110,"column":36},"skip":true},{"start":{"line":110,"column":40},"end":{"line":110,"column":41},"skip":true}]},"11":{"line":130,"type":"cond-expr","locations":[{"start":{"line":130,"column":48},"end":{"line":130,"column":61},"skip":true},{"start":{"line":130,"column":64},"end":{"line":130,"column":78},"skip":true}]},"12":{"line":144,"type":"if","locations":[{"start":{"line":144,"column":4},"end":{"line":144,"column":4}},{"start":{"line":144,"column":4},"end":{"line":144,"column":4}}]},"13":{"line":147,"type":"if","locations":[{"start":{"line":147,"column":6},"end":{"line":147,"column":6}},{"start":{"line":147,"column":6},"end":{"line":147,"column":6},"skip":true}]},"14":{"line":208,"type":"if","locations":[{"start":{"line":208,"column":4},"end":{"line":208,"column":4},"skip":true},{"start":{"line":208,"column":4},"end":{"line":208,"column":4}}]},"15":{"line":212,"type":"cond-expr","locations":[{"start":{"line":212,"column":13},"end":{"line":212,"column":21},"skip":true},{"start":{"line":212,"column":24},"end":{"line":212,"column":30},"skip":true}]},"16":{"line":215,"type":"if","locations":[{"start":{"line":215,"column":6},"end":{"line":215,"column":6}},{"start":{"line":215,"column":6},"end":{"line":215,"column":6}}]},"17":{"line":215,"type":"binary-expr","locations":[{"start":{"line":215,"column":10},"end":{"line":215,"column":18}},{"start":{"line":215,"column":23},"end":{"line":215,"column":30}},{"start":{"line":215,"column":34},"end":{"line":215,"column":65}}]},"18":{"line":222,"type":"binary-expr","locations":[{"start":{"line":222,"column":8},"end":{"line":222,"column":16}},{"start":{"line":223,"column":8},"end":{"line":223,"column":16}},{"start":{"line":224,"column":8},"end":{"line":227,"column":9}}]},"19":{"line":232,"type":"if","locations":[{"start":{"line":232,"column":6},"end":{"line":232,"column":6}},{"start":{"line":232,"column":6},"end":{"line":232,"column":6}}]},"20":{"line":232,"type":"binary-expr","locations":[{"start":{"line":232,"column":10},"end":{"line":232,"column":20}},{"start":{"line":232,"column":24},"end":{"line":232,"column":34}}]},"21":{"line":243,"type":"binary-expr","locations":[{"start":{"line":243,"column":6},"end":{"line":243,"column":11}},{"start":{"line":244,"column":6},"end":{"line":244,"column":11}},{"start":{"line":245,"column":6},"end":{"line":248,"column":7}}]},"22":{"line":255,"type":"if","locations":[{"start":{"line":255,"column":4},"end":{"line":255,"column":4}},{"start":{"line":255,"column":4},"end":{"line":255,"column":4}}]},"23":{"line":259,"type":"cond-expr","locations":[{"start":{"line":259,"column":13},"end":{"line":259,"column":21},"skip":true},{"start":{"line":259,"column":24},"end":{"line":259,"column":30},"skip":true}]},"24":{"line":261,"type":"if","locations":[{"start":{"line":261,"column":4},"end":{"line":261,"column":4}},{"start":{"line":261,"column":4},"end":{"line":261,"column":4}}]},"25":{"line":261,"type":"binary-expr","locations":[{"start":{"line":261,"column":8},"end":{"line":261,"column":16}},{"start":{"line":261,"column":21},"end":{"line":261,"column":28}},{"start":{"line":261,"column":32},"end":{"line":261,"column":63}}]},"26":{"line":290,"type":"switch","locations":[{"start":{"line":291,"column":6},"end":{"line":294,"column":14}},{"start":{"line":295,"column":6},"end":{"line":308,"column":14}},{"start":{"line":309,"column":6},"end":{"line":311,"column":14}}]},"27":{"line":304,"type":"cond-expr","locations":[{"start":{"line":305,"column":12},"end":{"line":305,"column":46}},{"start":{"line":306,"column":12},"end":{"line":306,"column":18}}]},"28":{"line":316,"type":"switch","locations":[{"start":{"line":317,"column":6},"end":{"line":319,"column":14}},{"start":{"line":320,"column":6},"end":{"line":332,"column":14}}]},"29":{"line":322,"type":"if","locations":[{"start":{"line":322,"column":8},"end":{"line":322,"column":8}},{"start":{"line":322,"column":8},"end":{"line":322,"column":8}}]},"30":{"line":342,"type":"if","locations":[{"start":{"line":342,"column":4},"end":{"line":342,"column":4}},{"start":{"line":342,"column":4},"end":{"line":342,"column":4}}]},"31":{"line":366,"type":"binary-expr","locations":[{"start":{"line":366,"column":4},"end":{"line":374,"column":5}},{"start":{"line":375,"column":4},"end":{"line":384,"column":5}}]}}}} \ No newline at end of file +{"/Users/agiammarchi/git/domdiff/cjs/index.js":{"path":"/Users/agiammarchi/git/domdiff/cjs/index.js","s":{"1":1,"2":1,"3":132,"4":65,"5":132,"6":132,"7":132,"8":132,"9":132,"10":132,"11":132,"12":132,"13":132,"14":124,"15":124,"16":132,"17":79,"18":79,"19":132,"20":132,"21":132,"22":6,"23":126,"24":31,"25":31,"26":95,"27":22,"28":22,"29":73,"30":73,"31":73,"32":73,"33":23,"34":23,"35":5,"36":5,"37":5,"38":50,"39":18,"40":18,"41":4,"42":4,"43":4,"44":64,"45":6,"46":6,"47":6,"48":58,"49":7,"50":7,"51":51,"52":51,"53":1},"b":{"1":[65,67],"2":[132,131],"3":[132,130],"4":[67,65],"5":[256,231,221],"6":[211,174,152],"7":[6,126],"8":[132,37],"9":[31,95],"10":[126,31],"11":[22,73],"12":[95,22],"13":[23,50],"14":[5,18],"15":[18,32],"16":[4,14],"17":[6,58],"18":[64,60],"19":[7,51],"20":[58,30]},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":4,"column":0},"end":{"line":6,"column":26}},"2":{"start":{"line":8,"column":0},"end":{"line":220,"column":2}},"3":{"start":{"line":17,"column":2},"end":{"line":18,"column":17}},"4":{"start":{"line":18,"column":4},"end":{"line":18,"column":17}},"5":{"start":{"line":20,"column":2},"end":{"line":20,"column":42}},"6":{"start":{"line":21,"column":2},"end":{"line":21,"column":39}},"7":{"start":{"line":22,"column":2},"end":{"line":22,"column":72}},"8":{"start":{"line":24,"column":2},"end":{"line":24,"column":44}},"9":{"start":{"line":25,"column":2},"end":{"line":25,"column":33}},"10":{"start":{"line":26,"column":2},"end":{"line":26,"column":23}},"11":{"start":{"line":28,"column":2},"end":{"line":28,"column":37}},"12":{"start":{"line":29,"column":2},"end":{"line":29,"column":22}},"13":{"start":{"line":32,"column":2},"end":{"line":39,"column":3}},"14":{"start":{"line":37,"column":4},"end":{"line":37,"column":19}},"15":{"start":{"line":38,"column":4},"end":{"line":38,"column":18}},"16":{"start":{"line":42,"column":2},"end":{"line":49,"column":3}},"17":{"start":{"line":47,"column":4},"end":{"line":47,"column":17}},"18":{"start":{"line":48,"column":4},"end":{"line":48,"column":16}},"19":{"start":{"line":51,"column":2},"end":{"line":51,"column":50}},"20":{"start":{"line":52,"column":2},"end":{"line":52,"column":47}},"21":{"start":{"line":55,"column":2},"end":{"line":56,"column":23}},"22":{"start":{"line":56,"column":4},"end":{"line":56,"column":23}},"23":{"start":{"line":59,"column":2},"end":{"line":69,"column":3}},"24":{"start":{"line":60,"column":4},"end":{"line":67,"column":6}},"25":{"start":{"line":68,"column":4},"end":{"line":68,"column":23}},"26":{"start":{"line":72,"column":2},"end":{"line":81,"column":3}},"27":{"start":{"line":73,"column":4},"end":{"line":79,"column":6}},"28":{"start":{"line":80,"column":4},"end":{"line":80,"column":23}},"29":{"start":{"line":83,"column":2},"end":{"line":83,"column":51}},"30":{"start":{"line":84,"column":2},"end":{"line":84,"column":48}},"31":{"start":{"line":85,"column":2},"end":{"line":85,"column":13}},"32":{"start":{"line":88,"column":2},"end":{"line":148,"column":3}},"33":{"start":{"line":89,"column":4},"end":{"line":97,"column":6}},"34":{"start":{"line":99,"column":4},"end":{"line":117,"column":5}},"35":{"start":{"line":100,"column":6},"end":{"line":107,"column":8}},"36":{"start":{"line":108,"column":6},"end":{"line":115,"column":8}},"37":{"start":{"line":116,"column":6},"end":{"line":116,"column":25}},"38":{"start":{"line":120,"column":7},"end":{"line":148,"column":3}},"39":{"start":{"line":121,"column":4},"end":{"line":129,"column":6}},"40":{"start":{"line":131,"column":4},"end":{"line":147,"column":5}},"41":{"start":{"line":132,"column":6},"end":{"line":138,"column":8}},"42":{"start":{"line":139,"column":6},"end":{"line":145,"column":8}},"43":{"start":{"line":146,"column":6},"end":{"line":146,"column":25}},"44":{"start":{"line":153,"column":2},"end":{"line":170,"column":3}},"45":{"start":{"line":154,"column":4},"end":{"line":161,"column":6}},"46":{"start":{"line":162,"column":4},"end":{"line":168,"column":6}},"47":{"start":{"line":169,"column":4},"end":{"line":169,"column":23}},"48":{"start":{"line":180,"column":2},"end":{"line":200,"column":3}},"49":{"start":{"line":191,"column":4},"end":{"line":198,"column":6}},"50":{"start":{"line":199,"column":4},"end":{"line":199,"column":23}},"51":{"start":{"line":203,"column":2},"end":{"line":217,"column":4}},"52":{"start":{"line":219,"column":2},"end":{"line":219,"column":21}},"53":{"start":{"line":222,"column":0},"end":{"line":222,"column":78}}},"branchMap":{"1":{"line":17,"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":17,"column":2}},{"start":{"line":17,"column":2},"end":{"line":17,"column":2}}]},"2":{"line":20,"type":"binary-expr","locations":[{"start":{"line":20,"column":18},"end":{"line":20,"column":33}},{"start":{"line":20,"column":37},"end":{"line":20,"column":41}}]},"3":{"line":21,"type":"binary-expr","locations":[{"start":{"line":21,"column":14},"end":{"line":21,"column":26}},{"start":{"line":21,"column":30},"end":{"line":21,"column":38}}]},"4":{"line":22,"type":"cond-expr","locations":[{"start":{"line":22,"column":42},"end":{"line":22,"column":46}},{"start":{"line":22,"column":49},"end":{"line":22,"column":71}}]},"5":{"line":33,"type":"binary-expr","locations":[{"start":{"line":33,"column":4},"end":{"line":33,"column":29}},{"start":{"line":34,"column":4},"end":{"line":34,"column":27}},{"start":{"line":35,"column":4},"end":{"line":35,"column":65}}]},"6":{"line":43,"type":"binary-expr","locations":[{"start":{"line":43,"column":4},"end":{"line":43,"column":29}},{"start":{"line":44,"column":4},"end":{"line":44,"column":27}},{"start":{"line":45,"column":4},"end":{"line":45,"column":69}}]},"7":{"line":55,"type":"if","locations":[{"start":{"line":55,"column":2},"end":{"line":55,"column":2}},{"start":{"line":55,"column":2},"end":{"line":55,"column":2}}]},"8":{"line":55,"type":"binary-expr","locations":[{"start":{"line":55,"column":6},"end":{"line":55,"column":17}},{"start":{"line":55,"column":21},"end":{"line":55,"column":31}}]},"9":{"line":59,"type":"if","locations":[{"start":{"line":59,"column":2},"end":{"line":59,"column":2}},{"start":{"line":59,"column":2},"end":{"line":59,"column":2}}]},"10":{"line":59,"type":"binary-expr","locations":[{"start":{"line":59,"column":6},"end":{"line":59,"column":17}},{"start":{"line":59,"column":21},"end":{"line":59,"column":44}}]},"11":{"line":72,"type":"if","locations":[{"start":{"line":72,"column":2},"end":{"line":72,"column":2}},{"start":{"line":72,"column":2},"end":{"line":72,"column":2}}]},"12":{"line":72,"type":"binary-expr","locations":[{"start":{"line":72,"column":6},"end":{"line":72,"column":16}},{"start":{"line":72,"column":20},"end":{"line":72,"column":45}}]},"13":{"line":88,"type":"if","locations":[{"start":{"line":88,"column":2},"end":{"line":88,"column":2}},{"start":{"line":88,"column":2},"end":{"line":88,"column":2}}]},"14":{"line":99,"type":"if","locations":[{"start":{"line":99,"column":4},"end":{"line":99,"column":4}},{"start":{"line":99,"column":4},"end":{"line":99,"column":4}}]},"15":{"line":120,"type":"if","locations":[{"start":{"line":120,"column":7},"end":{"line":120,"column":7}},{"start":{"line":120,"column":7},"end":{"line":120,"column":7},"skip":true}]},"16":{"line":131,"type":"if","locations":[{"start":{"line":131,"column":4},"end":{"line":131,"column":4}},{"start":{"line":131,"column":4},"end":{"line":131,"column":4}}]},"17":{"line":153,"type":"if","locations":[{"start":{"line":153,"column":2},"end":{"line":153,"column":2}},{"start":{"line":153,"column":2},"end":{"line":153,"column":2},"skip":true}]},"18":{"line":153,"type":"binary-expr","locations":[{"start":{"line":153,"column":7},"end":{"line":153,"column":25}},{"start":{"line":153,"column":29},"end":{"line":153,"column":46}}]},"19":{"line":180,"type":"if","locations":[{"start":{"line":180,"column":2},"end":{"line":180,"column":2}},{"start":{"line":180,"column":2},"end":{"line":180,"column":2}}]},"20":{"line":181,"type":"binary-expr","locations":[{"start":{"line":181,"column":4},"end":{"line":181,"column":36}},{"start":{"line":182,"column":4},"end":{"line":189,"column":5}}]}}},"/Users/agiammarchi/git/domdiff/cjs/utils.js":{"path":"/Users/agiammarchi/git/domdiff/cjs/utils.js","s":{"1":1,"2":2112,"3":2077,"4":35,"5":35,"6":1119,"7":35,"8":1,"9":1,"10":4985,"11":1,"12":1,"13":4353,"14":1,"15":1,"16":41,"17":41,"18":0,"19":41,"20":1093,"21":1093,"22":1093,"23":45,"24":45,"25":1093,"26":9,"27":1084,"28":32,"29":1,"30":1,"31":30,"32":1052,"33":1052,"34":30,"35":1,"36":1,"37":43,"38":1,"39":1,"40":87,"41":67,"42":20,"43":20,"44":20,"45":20,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":1,"59":2,"60":2,"61":2,"62":2,"63":2,"64":2,"65":1006,"66":2,"67":2,"68":1006,"69":2,"70":2000,"71":2000,"72":1000,"73":1000,"74":1000,"75":1000,"76":2,"77":2,"78":2,"79":952,"80":2,"81":2,"82":2,"83":2,"84":2,"85":54,"86":54,"87":863,"88":863,"89":54,"90":945,"91":945,"92":54,"93":54,"94":54,"95":54,"96":2,"97":1083,"98":1083,"99":2,"100":7,"101":7,"102":2,"103":1,"104":51,"105":51,"106":51,"107":51,"108":51,"109":372,"110":2,"111":370,"112":370,"113":370,"114":370,"115":3548,"116":3237,"117":311,"118":3548,"119":3548,"120":153,"121":153,"122":3548,"123":49,"124":3499,"125":49,"126":49,"127":49,"128":268,"129":93,"130":93,"131":93,"132":268,"133":49,"134":219,"135":219,"136":219,"137":219,"138":112,"139":112,"140":107,"141":107,"142":49,"143":1,"144":51,"145":51,"146":51,"147":51,"148":51,"149":3264,"150":147,"151":147,"152":147,"153":2058,"154":2058,"155":2058,"156":1059,"157":1059,"158":51,"159":51,"160":3264,"161":147,"162":147,"163":1059,"164":1008,"165":51,"166":1059,"167":1,"168":1000,"169":1000,"170":1000,"171":10000,"172":10000,"173":7345,"174":2655,"175":1000,"176":1,"177":51,"178":1},"b":{"1":[2077,35],"2":[0,41],"3":[1138,1138,1129],"4":[9,1084],"5":[1082,1075],"6":[13,30],"7":[19,11],"8":[67,20],"9":[0,1],"10":[0,0],"11":[0,2],"12":[1000,1000],"13":[1000,0],"14":[2,370],"15":[319,51],"16":[3237,311],"17":[3548,3178,2908],"18":[3701,2452,2189],"19":[49,3499],"20":[3548,192],"21":[361,300,231],"22":[49,219],"23":[219,0],"24":[112,107],"25":[219,207,125],"26":[147,2058,1059],"27":[950,1108],"28":[147,1059],"29":[1008,51],"30":[7345,2655],"31":[51,2]},"f":{"1":0},"fnMap":{"1":{"name":"(anonymous_1)","line":103,"loc":{"start":{"line":103,"column":2},"end":{"line":103,"column":14}},"skip":true}},"statementMap":{"1":{"start":{"line":2,"column":0},"end":{"line":11,"column":2}},"2":{"start":{"line":3,"column":2},"end":{"line":10,"column":3}},"3":{"start":{"line":4,"column":4},"end":{"line":4,"column":57}},"4":{"start":{"line":6,"column":4},"end":{"line":6,"column":67}},"5":{"start":{"line":7,"column":4},"end":{"line":8,"column":54}},"6":{"start":{"line":8,"column":6},"end":{"line":8,"column":54}},"7":{"start":{"line":9,"column":4},"end":{"line":9,"column":42}},"8":{"start":{"line":12,"column":0},"end":{"line":12,"column":24}},"9":{"start":{"line":14,"column":0},"end":{"line":14,"column":30}},"10":{"start":{"line":14,"column":23},"end":{"line":14,"column":29}},"11":{"start":{"line":15,"column":0},"end":{"line":15,"column":20}},"12":{"start":{"line":17,"column":0},"end":{"line":17,"column":24}},"13":{"start":{"line":17,"column":22},"end":{"line":17,"column":23}},"14":{"start":{"line":18,"column":0},"end":{"line":18,"column":28}},"15":{"start":{"line":20,"column":0},"end":{"line":49,"column":2}},"16":{"start":{"line":29,"column":2},"end":{"line":29,"column":37}},"17":{"start":{"line":31,"column":2},"end":{"line":32,"column":14}},"18":{"start":{"line":32,"column":4},"end":{"line":32,"column":14},"skip":true},"19":{"start":{"line":33,"column":2},"end":{"line":47,"column":3}},"20":{"start":{"line":34,"column":4},"end":{"line":34,"column":22}},"21":{"start":{"line":35,"column":4},"end":{"line":35,"column":22}},"22":{"start":{"line":36,"column":4},"end":{"line":43,"column":5}},"23":{"start":{"line":41,"column":6},"end":{"line":41,"column":10}},"24":{"start":{"line":42,"column":6},"end":{"line":42,"column":10}},"25":{"start":{"line":44,"column":4},"end":{"line":45,"column":23}},"26":{"start":{"line":45,"column":6},"end":{"line":45,"column":23}},"27":{"start":{"line":46,"column":4},"end":{"line":46,"column":22}},"28":{"start":{"line":48,"column":2},"end":{"line":48,"column":12}},"29":{"start":{"line":50,"column":0},"end":{"line":50,"column":26}},"30":{"start":{"line":52,"column":0},"end":{"line":70,"column":2}},"31":{"start":{"line":60,"column":2},"end":{"line":68,"column":5}},"32":{"start":{"line":66,"column":6},"end":{"line":66,"column":21}},"33":{"start":{"line":67,"column":6},"end":{"line":67,"column":18}},"34":{"start":{"line":69,"column":2},"end":{"line":69,"column":25}},"35":{"start":{"line":71,"column":0},"end":{"line":71,"column":32}},"36":{"start":{"line":73,"column":0},"end":{"line":77,"column":24}},"37":{"start":{"line":73,"column":47},"end":{"line":77,"column":23}},"38":{"start":{"line":78,"column":0},"end":{"line":78,"column":20}},"39":{"start":{"line":80,"column":0},"end":{"line":89,"column":2}},"40":{"start":{"line":81,"column":2},"end":{"line":88,"column":3}},"41":{"start":{"line":82,"column":4},"end":{"line":82,"column":49}},"42":{"start":{"line":84,"column":4},"end":{"line":84,"column":53}},"43":{"start":{"line":85,"column":4},"end":{"line":85,"column":51}},"44":{"start":{"line":86,"column":4},"end":{"line":86,"column":50}},"45":{"start":{"line":87,"column":4},"end":{"line":87,"column":27}},"46":{"start":{"line":90,"column":0},"end":{"line":90,"column":24}},"47":{"start":{"line":96,"column":0},"end":{"line":96,"column":20}},"48":{"start":{"line":97,"column":0},"end":{"line":97,"column":20}},"49":{"start":{"line":98,"column":0},"end":{"line":98,"column":15}},"50":{"start":{"line":99,"column":0},"end":{"line":99,"column":20}},"51":{"start":{"line":102,"column":0},"end":{"line":115,"column":1},"skip":true},"52":{"start":{"line":104,"column":4},"end":{"line":104,"column":25},"skip":true},"53":{"start":{"line":105,"column":4},"end":{"line":112,"column":6},"skip":true},"54":{"start":{"line":106,"column":20},"end":{"line":106,"column":41},"skip":true},"55":{"start":{"line":107,"column":20},"end":{"line":107,"column":39},"skip":true},"56":{"start":{"line":109,"column":8},"end":{"line":109,"column":35},"skip":true},"57":{"start":{"line":110,"column":8},"end":{"line":110,"column":51},"skip":true},"58":{"start":{"line":117,"column":0},"end":{"line":190,"column":2}},"59":{"start":{"line":128,"column":2},"end":{"line":128,"column":12}},"60":{"start":{"line":130,"column":2},"end":{"line":130,"column":79},"skip":true},"61":{"start":{"line":131,"column":2},"end":{"line":131,"column":31}},"62":{"start":{"line":132,"column":2},"end":{"line":132,"column":30}},"63":{"start":{"line":133,"column":2},"end":{"line":133,"column":16}},"64":{"start":{"line":135,"column":2},"end":{"line":136,"column":26}},"65":{"start":{"line":136,"column":4},"end":{"line":136,"column":26}},"66":{"start":{"line":138,"column":2},"end":{"line":138,"column":25}},"67":{"start":{"line":139,"column":2},"end":{"line":140,"column":35}},"68":{"start":{"line":140,"column":4},"end":{"line":140,"column":35}},"69":{"start":{"line":142,"column":2},"end":{"line":156,"column":3}},"70":{"start":{"line":143,"column":4},"end":{"line":143,"column":48}},"71":{"start":{"line":144,"column":4},"end":{"line":155,"column":5}},"72":{"start":{"line":145,"column":6},"end":{"line":145,"column":41}},"73":{"start":{"line":147,"column":6},"end":{"line":154,"column":7}},"74":{"start":{"line":148,"column":8},"end":{"line":148,"column":28}},"75":{"start":{"line":149,"column":8},"end":{"line":153,"column":10}},"76":{"start":{"line":158,"column":2},"end":{"line":158,"column":15}},"77":{"start":{"line":159,"column":2},"end":{"line":159,"column":15}},"78":{"start":{"line":160,"column":2},"end":{"line":160,"column":36}},"79":{"start":{"line":160,"column":32},"end":{"line":160,"column":36}},"80":{"start":{"line":162,"column":2},"end":{"line":162,"column":46}},"81":{"start":{"line":163,"column":2},"end":{"line":163,"column":29}},"82":{"start":{"line":164,"column":2},"end":{"line":164,"column":20}},"83":{"start":{"line":165,"column":2},"end":{"line":165,"column":14}},"84":{"start":{"line":166,"column":2},"end":{"line":180,"column":3}},"85":{"start":{"line":167,"column":4},"end":{"line":167,"column":29}},"86":{"start":{"line":168,"column":4},"end":{"line":171,"column":5}},"87":{"start":{"line":169,"column":6},"end":{"line":169,"column":33}},"88":{"start":{"line":170,"column":6},"end":{"line":170,"column":18}},"89":{"start":{"line":172,"column":4},"end":{"line":175,"column":5}},"90":{"start":{"line":173,"column":6},"end":{"line":173,"column":32}},"91":{"start":{"line":174,"column":6},"end":{"line":174,"column":19}},"92":{"start":{"line":176,"column":4},"end":{"line":176,"column":26}},"93":{"start":{"line":177,"column":4},"end":{"line":177,"column":16}},"94":{"start":{"line":178,"column":4},"end":{"line":178,"column":17}},"95":{"start":{"line":179,"column":4},"end":{"line":179,"column":19}},"96":{"start":{"line":181,"column":2},"end":{"line":184,"column":3}},"97":{"start":{"line":182,"column":4},"end":{"line":182,"column":31}},"98":{"start":{"line":183,"column":4},"end":{"line":183,"column":16}},"99":{"start":{"line":185,"column":2},"end":{"line":188,"column":3}},"100":{"start":{"line":186,"column":4},"end":{"line":186,"column":30}},"101":{"start":{"line":187,"column":4},"end":{"line":187,"column":17}},"102":{"start":{"line":189,"column":2},"end":{"line":189,"column":14}},"103":{"start":{"line":194,"column":0},"end":{"line":272,"column":2}},"104":{"start":{"line":203,"column":2},"end":{"line":203,"column":29}},"105":{"start":{"line":204,"column":2},"end":{"line":204,"column":15}},"106":{"start":{"line":205,"column":2},"end":{"line":205,"column":29}},"107":{"start":{"line":206,"column":2},"end":{"line":237,"column":3}},"108":{"start":{"line":206,"column":9},"end":{"line":237,"column":3}},"109":{"start":{"line":208,"column":4},"end":{"line":209,"column":18}},"110":{"start":{"line":209,"column":6},"end":{"line":209,"column":18},"skip":true},"111":{"start":{"line":210,"column":4},"end":{"line":210,"column":15}},"112":{"start":{"line":212,"column":4},"end":{"line":212,"column":31},"skip":true},"113":{"start":{"line":213,"column":4},"end":{"line":213,"column":19}},"114":{"start":{"line":214,"column":4},"end":{"line":236,"column":5}},"115":{"start":{"line":215,"column":6},"end":{"line":219,"column":7}},"116":{"start":{"line":216,"column":8},"end":{"line":216,"column":27}},"117":{"start":{"line":218,"column":8},"end":{"line":218,"column":31}},"118":{"start":{"line":220,"column":6},"end":{"line":220,"column":16}},"119":{"start":{"line":221,"column":6},"end":{"line":231,"column":7}},"120":{"start":{"line":229,"column":8},"end":{"line":229,"column":12}},"121":{"start":{"line":230,"column":8},"end":{"line":230,"column":12}},"122":{"start":{"line":232,"column":6},"end":{"line":234,"column":7}},"123":{"start":{"line":233,"column":8},"end":{"line":233,"column":20}},"124":{"start":{"line":235,"column":6},"end":{"line":235,"column":20}},"125":{"start":{"line":239,"column":2},"end":{"line":239,"column":41}},"126":{"start":{"line":240,"column":2},"end":{"line":240,"column":32}},"127":{"start":{"line":241,"column":2},"end":{"line":270,"column":3}},"128":{"start":{"line":242,"column":4},"end":{"line":254,"column":5}},"129":{"start":{"line":251,"column":6},"end":{"line":251,"column":29}},"130":{"start":{"line":252,"column":6},"end":{"line":252,"column":10}},"131":{"start":{"line":253,"column":6},"end":{"line":253,"column":10}},"132":{"start":{"line":255,"column":4},"end":{"line":256,"column":12}},"133":{"start":{"line":256,"column":6},"end":{"line":256,"column":12}},"134":{"start":{"line":257,"column":4},"end":{"line":257,"column":15}},"135":{"start":{"line":259,"column":4},"end":{"line":259,"column":31},"skip":true},"136":{"start":{"line":260,"column":4},"end":{"line":260,"column":14}},"137":{"start":{"line":261,"column":4},"end":{"line":269,"column":5}},"138":{"start":{"line":263,"column":6},"end":{"line":263,"column":10}},"139":{"start":{"line":264,"column":6},"end":{"line":264,"column":34}},"140":{"start":{"line":267,"column":6},"end":{"line":267,"column":10}},"141":{"start":{"line":268,"column":6},"end":{"line":268,"column":33}},"142":{"start":{"line":271,"column":2},"end":{"line":271,"column":14}},"143":{"start":{"line":274,"column":0},"end":{"line":335,"column":2}},"144":{"start":{"line":285,"column":2},"end":{"line":285,"column":23}},"145":{"start":{"line":286,"column":2},"end":{"line":286,"column":29}},"146":{"start":{"line":287,"column":2},"end":{"line":287,"column":34}},"147":{"start":{"line":288,"column":2},"end":{"line":288,"column":12}},"148":{"start":{"line":289,"column":2},"end":{"line":313,"column":3}},"149":{"start":{"line":290,"column":4},"end":{"line":312,"column":5}},"150":{"start":{"line":292,"column":8},"end":{"line":292,"column":22}},"151":{"start":{"line":293,"column":8},"end":{"line":293,"column":23}},"152":{"start":{"line":294,"column":8},"end":{"line":294,"column":14}},"153":{"start":{"line":297,"column":8},"end":{"line":297,"column":46}},"154":{"start":{"line":298,"column":8},"end":{"line":307,"column":10}},"155":{"start":{"line":308,"column":8},"end":{"line":308,"column":14}},"156":{"start":{"line":310,"column":8},"end":{"line":310,"column":23}},"157":{"start":{"line":311,"column":8},"end":{"line":311,"column":14}},"158":{"start":{"line":314,"column":2},"end":{"line":314,"column":8}},"159":{"start":{"line":315,"column":2},"end":{"line":334,"column":3}},"160":{"start":{"line":316,"column":4},"end":{"line":333,"column":5}},"161":{"start":{"line":318,"column":8},"end":{"line":318,"column":23}},"162":{"start":{"line":319,"column":8},"end":{"line":319,"column":14}},"163":{"start":{"line":322,"column":8},"end":{"line":331,"column":12}},"164":{"start":{"line":323,"column":10},"end":{"line":323,"column":25}},"165":{"start":{"line":325,"column":10},"end":{"line":331,"column":12}},"166":{"start":{"line":332,"column":8},"end":{"line":332,"column":14}},"167":{"start":{"line":337,"column":0},"end":{"line":348,"column":1}},"168":{"start":{"line":338,"column":2},"end":{"line":338,"column":13}},"169":{"start":{"line":339,"column":2},"end":{"line":339,"column":18}},"170":{"start":{"line":340,"column":2},"end":{"line":346,"column":3}},"171":{"start":{"line":341,"column":4},"end":{"line":341,"column":38}},"172":{"start":{"line":342,"column":4},"end":{"line":345,"column":19}},"173":{"start":{"line":343,"column":6},"end":{"line":343,"column":15}},"174":{"start":{"line":345,"column":6},"end":{"line":345,"column":19}},"175":{"start":{"line":347,"column":2},"end":{"line":347,"column":12}},"176":{"start":{"line":350,"column":0},"end":{"line":394,"column":2}},"177":{"start":{"line":365,"column":2},"end":{"line":393,"column":4}},"178":{"start":{"line":395,"column":0},"end":{"line":395,"column":30}}},"branchMap":{"1":{"line":3,"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":3,"column":2}},{"start":{"line":3,"column":2},"end":{"line":3,"column":2}}]},"2":{"line":31,"type":"if","locations":[{"start":{"line":31,"column":2},"end":{"line":31,"column":2},"skip":true},{"start":{"line":31,"column":2},"end":{"line":31,"column":2}}]},"3":{"line":37,"type":"binary-expr","locations":[{"start":{"line":37,"column":6},"end":{"line":37,"column":17}},{"start":{"line":38,"column":6},"end":{"line":38,"column":17}},{"start":{"line":39,"column":6},"end":{"line":39,"column":41}}]},"4":{"line":44,"type":"if","locations":[{"start":{"line":44,"column":4},"end":{"line":44,"column":4}},{"start":{"line":44,"column":4},"end":{"line":44,"column":4}}]},"5":{"line":61,"type":"binary-expr","locations":[{"start":{"line":61,"column":4},"end":{"line":61,"column":29}},{"start":{"line":62,"column":4},"end":{"line":65,"column":5}}]},"6":{"line":73,"type":"cond-expr","locations":[{"start":{"line":74,"column":14},"end":{"line":74,"column":29}},{"start":{"line":75,"column":15},"end":{"line":77,"column":22}}]},"7":{"line":75,"type":"cond-expr","locations":[{"start":{"line":76,"column":16},"end":{"line":76,"column":48}},{"start":{"line":77,"column":16},"end":{"line":77,"column":22}}]},"8":{"line":81,"type":"if","locations":[{"start":{"line":81,"column":2},"end":{"line":81,"column":2}},{"start":{"line":81,"column":2},"end":{"line":81,"column":2}}]},"9":{"line":102,"type":"cond-expr","locations":[{"start":{"line":103,"column":2},"end":{"line":113,"column":3},"skip":true},{"start":{"line":114,"column":2},"end":{"line":114,"column":5},"skip":true}]},"10":{"line":110,"type":"cond-expr","locations":[{"start":{"line":110,"column":19},"end":{"line":110,"column":36},"skip":true},{"start":{"line":110,"column":40},"end":{"line":110,"column":41},"skip":true}]},"11":{"line":130,"type":"cond-expr","locations":[{"start":{"line":130,"column":48},"end":{"line":130,"column":61},"skip":true},{"start":{"line":130,"column":64},"end":{"line":130,"column":78},"skip":true}]},"12":{"line":144,"type":"if","locations":[{"start":{"line":144,"column":4},"end":{"line":144,"column":4}},{"start":{"line":144,"column":4},"end":{"line":144,"column":4}}]},"13":{"line":147,"type":"if","locations":[{"start":{"line":147,"column":6},"end":{"line":147,"column":6}},{"start":{"line":147,"column":6},"end":{"line":147,"column":6},"skip":true}]},"14":{"line":208,"type":"if","locations":[{"start":{"line":208,"column":4},"end":{"line":208,"column":4},"skip":true},{"start":{"line":208,"column":4},"end":{"line":208,"column":4}}]},"15":{"line":212,"type":"cond-expr","locations":[{"start":{"line":212,"column":13},"end":{"line":212,"column":21},"skip":true},{"start":{"line":212,"column":24},"end":{"line":212,"column":30},"skip":true}]},"16":{"line":215,"type":"if","locations":[{"start":{"line":215,"column":6},"end":{"line":215,"column":6}},{"start":{"line":215,"column":6},"end":{"line":215,"column":6}}]},"17":{"line":215,"type":"binary-expr","locations":[{"start":{"line":215,"column":10},"end":{"line":215,"column":18}},{"start":{"line":215,"column":23},"end":{"line":215,"column":30}},{"start":{"line":215,"column":34},"end":{"line":215,"column":65}}]},"18":{"line":222,"type":"binary-expr","locations":[{"start":{"line":222,"column":8},"end":{"line":222,"column":16}},{"start":{"line":223,"column":8},"end":{"line":223,"column":16}},{"start":{"line":224,"column":8},"end":{"line":227,"column":9}}]},"19":{"line":232,"type":"if","locations":[{"start":{"line":232,"column":6},"end":{"line":232,"column":6}},{"start":{"line":232,"column":6},"end":{"line":232,"column":6}}]},"20":{"line":232,"type":"binary-expr","locations":[{"start":{"line":232,"column":10},"end":{"line":232,"column":20}},{"start":{"line":232,"column":24},"end":{"line":232,"column":34}}]},"21":{"line":243,"type":"binary-expr","locations":[{"start":{"line":243,"column":6},"end":{"line":243,"column":11}},{"start":{"line":244,"column":6},"end":{"line":244,"column":11}},{"start":{"line":245,"column":6},"end":{"line":248,"column":7}}]},"22":{"line":255,"type":"if","locations":[{"start":{"line":255,"column":4},"end":{"line":255,"column":4}},{"start":{"line":255,"column":4},"end":{"line":255,"column":4}}]},"23":{"line":259,"type":"cond-expr","locations":[{"start":{"line":259,"column":13},"end":{"line":259,"column":21},"skip":true},{"start":{"line":259,"column":24},"end":{"line":259,"column":30},"skip":true}]},"24":{"line":261,"type":"if","locations":[{"start":{"line":261,"column":4},"end":{"line":261,"column":4}},{"start":{"line":261,"column":4},"end":{"line":261,"column":4}}]},"25":{"line":261,"type":"binary-expr","locations":[{"start":{"line":261,"column":8},"end":{"line":261,"column":16}},{"start":{"line":261,"column":21},"end":{"line":261,"column":28}},{"start":{"line":261,"column":32},"end":{"line":261,"column":63}}]},"26":{"line":290,"type":"switch","locations":[{"start":{"line":291,"column":6},"end":{"line":294,"column":14}},{"start":{"line":295,"column":6},"end":{"line":308,"column":14}},{"start":{"line":309,"column":6},"end":{"line":311,"column":14}}]},"27":{"line":304,"type":"cond-expr","locations":[{"start":{"line":305,"column":12},"end":{"line":305,"column":46}},{"start":{"line":306,"column":12},"end":{"line":306,"column":18}}]},"28":{"line":316,"type":"switch","locations":[{"start":{"line":317,"column":6},"end":{"line":319,"column":14}},{"start":{"line":320,"column":6},"end":{"line":332,"column":14}}]},"29":{"line":322,"type":"if","locations":[{"start":{"line":322,"column":8},"end":{"line":322,"column":8}},{"start":{"line":322,"column":8},"end":{"line":322,"column":8}}]},"30":{"line":342,"type":"if","locations":[{"start":{"line":342,"column":4},"end":{"line":342,"column":4}},{"start":{"line":342,"column":4},"end":{"line":342,"column":4}}]},"31":{"line":366,"type":"binary-expr","locations":[{"start":{"line":366,"column":4},"end":{"line":374,"column":5}},{"start":{"line":375,"column":4},"end":{"line":384,"column":5}}]}}}} \ No newline at end of file diff --git a/coverage/lcov-report/cjs/index.html b/coverage/lcov-report/cjs/index.html index 73d8a98..55497cc 100644 --- a/coverage/lcov-report/cjs/index.html +++ b/coverage/lcov-report/cjs/index.html @@ -94,7 +94,7 @@

diff --git a/coverage/lcov-report/cjs/index.js.html b/coverage/lcov-report/cjs/index.js.html index f999319..e0b0c0a 100644 --- a/coverage/lcov-report/cjs/index.js.html +++ b/coverage/lcov-report/cjs/index.js.html @@ -715,7 +715,7 @@

diff --git a/coverage/lcov-report/cjs/utils.js.html b/coverage/lcov-report/cjs/utils.js.html index a82bece..3371249 100644 --- a/coverage/lcov-report/cjs/utils.js.html +++ b/coverage/lcov-report/cjs/utils.js.html @@ -444,8 +444,8 @@

395 396  -2108× -2073× +2112× +2077×   35× 35× @@ -458,7 +458,7 @@

4985×   -4388× +4353×   @@ -601,34 +601,34 @@

  -948× +952×   -58× -58× -930× -930× +54× +54× +863× +863×   -58× -840× -840× +54× +945× +945×   -58× -58× -58× -58× +54× +54× +54× +54×   -1012× -1012× +1083× +1083×   -108× -108× + +     @@ -731,15 +731,15 @@

51× 51× 51× -3260× +3264×   -151× -151× -151× +147× +147× +147×     -2054× -2054× +2058× +2058×       @@ -749,22 +749,22 @@

      -2054× +2058×   -1055× -1055× +1059× +1059×     51× 51× -3260× +3264×   -151× -151× +147× +147×     -1055× -1004× +1059× +1008×   51×   @@ -773,7 +773,7 @@

      -1055× +1059×       @@ -784,9 +784,9 @@

1000× 10000× 10000× -7283× +7345×   -2717× +2655×   1000×   @@ -1177,7 +1177,7 @@

let lo = 1; let hi = length; while (lo < hi) { - var mid = ((lo + hi) / 2) >>> 0; + const mid = ((lo + hi) / 2) >>> 0; if (j < ktr[mid]) hi = mid; else @@ -1238,7 +1238,7 @@

diff --git a/coverage/lcov-report/index.html b/coverage/lcov-report/index.html index a1ac4ec..87f852f 100644 --- a/coverage/lcov-report/index.html +++ b/coverage/lcov-report/index.html @@ -81,7 +81,7 @@

diff --git a/coverage/lcov.info b/coverage/lcov.info index 27d5b3e..bcbf6ee 100644 --- a/coverage/lcov.info +++ b/coverage/lcov.info @@ -109,8 +109,8 @@ FNF:1 FNH:1 FNDA:0,(anonymous_1) DA:2,1 -DA:3,2108 -DA:4,2073 +DA:3,2112 +DA:4,2077 DA:6,35 DA:7,35 DA:8,1119 @@ -118,7 +118,7 @@ DA:9,35 DA:12,1 DA:14,4985 DA:15,1 -DA:17,4388 +DA:17,4353 DA:18,1 DA:20,1 DA:29,41 @@ -182,29 +182,29 @@ DA:148,1000 DA:149,1000 DA:158,2 DA:159,2 -DA:160,948 +DA:160,952 DA:162,2 DA:163,2 DA:164,2 DA:165,2 DA:166,2 -DA:167,58 -DA:168,58 -DA:169,930 -DA:170,930 -DA:172,58 -DA:173,840 -DA:174,840 -DA:176,58 -DA:177,58 -DA:178,58 -DA:179,58 +DA:167,54 +DA:168,54 +DA:169,863 +DA:170,863 +DA:172,54 +DA:173,945 +DA:174,945 +DA:176,54 +DA:177,54 +DA:178,54 +DA:179,54 DA:181,2 -DA:182,1012 -DA:183,1012 +DA:182,1083 +DA:183,1083 DA:185,2 -DA:186,108 -DA:187,108 +DA:186,7 +DA:187,7 DA:189,2 DA:194,1 DA:203,51 @@ -251,39 +251,39 @@ DA:286,51 DA:287,51 DA:288,51 DA:289,51 -DA:290,3260 -DA:292,151 -DA:293,151 -DA:294,151 -DA:297,2054 -DA:298,2054 -DA:308,2054 -DA:310,1055 -DA:311,1055 +DA:290,3264 +DA:292,147 +DA:293,147 +DA:294,147 +DA:297,2058 +DA:298,2058 +DA:308,2058 +DA:310,1059 +DA:311,1059 DA:314,51 DA:315,51 -DA:316,3260 -DA:318,151 -DA:319,151 -DA:322,1055 -DA:323,1004 +DA:316,3264 +DA:318,147 +DA:319,147 +DA:322,1059 +DA:323,1008 DA:325,51 -DA:332,1055 +DA:332,1059 DA:337,1 DA:338,1000 DA:339,1000 DA:340,1000 DA:341,10000 DA:342,10000 -DA:343,7283 -DA:345,2717 +DA:343,7345 +DA:345,2655 DA:347,1000 DA:350,1 DA:365,51 DA:395,1 LF:173 LH:173 -BRDA:3,1,0,2073 +BRDA:3,1,0,2077 BRDA:3,1,1,35 BRDA:31,2,0,0 BRDA:31,2,1,41 @@ -338,17 +338,17 @@ BRDA:261,24,1,107 BRDA:261,25,0,219 BRDA:261,25,1,207 BRDA:261,25,2,125 -BRDA:290,26,0,151 -BRDA:290,26,1,2054 -BRDA:290,26,2,1055 -BRDA:304,27,0,989 -BRDA:304,27,1,1065 -BRDA:316,28,0,151 -BRDA:316,28,1,1055 -BRDA:322,29,0,1004 +BRDA:290,26,0,147 +BRDA:290,26,1,2058 +BRDA:290,26,2,1059 +BRDA:304,27,0,950 +BRDA:304,27,1,1108 +BRDA:316,28,0,147 +BRDA:316,28,1,1059 +BRDA:322,29,0,1008 BRDA:322,29,1,51 -BRDA:342,30,0,7283 -BRDA:342,30,1,2717 +BRDA:342,30,0,7345 +BRDA:342,30,1,2655 BRDA:366,31,0,51 BRDA:366,31,1,2 BRF:68 diff --git a/esm/utils.js b/esm/utils.js index f4f8494..da00772 100644 --- a/esm/utils.js +++ b/esm/utils.js @@ -330,7 +330,7 @@ const findK = (ktr, length, j) => { let lo = 1; let hi = length; while (lo < hi) { - var mid = ((lo + hi) / 2) >>> 0; + const mid = ((lo + hi) / 2) >>> 0; if (j < ktr[mid]) hi = mid; else From f8edeab4c26cfbf54f3b239cef13b3a8be7c437d Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Thu, 22 Nov 2018 08:39:45 +0100 Subject: [PATCH 43/71] Fix #10 - Poorlyfilled Rel not Reliable" --- cjs/utils.js | 10 +- coverage/coverage.json | 1 - coverage/lcov-report/base.css | 213 ---- coverage/lcov-report/cjs/index.html | 110 -- coverage/lcov-report/cjs/index.js.html | 731 ------------ coverage/lcov-report/cjs/utils.js.html | 1254 -------------------- coverage/lcov-report/index.html | 97 -- coverage/lcov-report/prettify.css | 1 - coverage/lcov-report/prettify.js | 1 - coverage/lcov-report/sort-arrow-sprite.png | Bin 209 -> 0 bytes coverage/lcov-report/sorter.js | 158 --- coverage/lcov.info | 356 ------ esm/utils.js | 10 +- index.js | 14 +- min.js | 2 +- 15 files changed, 18 insertions(+), 2940 deletions(-) delete mode 100644 coverage/coverage.json delete mode 100644 coverage/lcov-report/base.css delete mode 100644 coverage/lcov-report/cjs/index.html delete mode 100644 coverage/lcov-report/cjs/index.js.html delete mode 100644 coverage/lcov-report/cjs/utils.js.html delete mode 100644 coverage/lcov-report/index.html delete mode 100644 coverage/lcov-report/prettify.css delete mode 100644 coverage/lcov-report/prettify.js delete mode 100644 coverage/lcov-report/sort-arrow-sprite.png delete mode 100644 coverage/lcov-report/sorter.js delete mode 100644 coverage/lcov.info diff --git a/cjs/utils.js b/cjs/utils.js index 5218aec..e639e4c 100644 --- a/cjs/utils.js +++ b/cjs/utils.js @@ -103,11 +103,11 @@ const Rel = typeof Map === 'undefined' ? function () { const k = [], v = []; return { - has: value => -1 < k.indexOf(value), - get: value => v[k.indexOf(value)], - set: value => { - const i = k.indexOf(value); - v[i < 0 ? (k.push(value) - 1) : i] = value; + has: key => -1 < k.indexOf(key), + get: key => v[k.indexOf(key)], + set: (key, value) => { + const i = k.indexOf(key); + v[i < 0 ? (k.push(key) - 1) : i] = value; } }; } : diff --git a/coverage/coverage.json b/coverage/coverage.json deleted file mode 100644 index 3e2dd94..0000000 --- a/coverage/coverage.json +++ /dev/null @@ -1 +0,0 @@ -{"/Users/agiammarchi/git/domdiff/cjs/index.js":{"path":"/Users/agiammarchi/git/domdiff/cjs/index.js","s":{"1":1,"2":1,"3":132,"4":65,"5":132,"6":132,"7":132,"8":132,"9":132,"10":132,"11":132,"12":132,"13":132,"14":124,"15":124,"16":132,"17":79,"18":79,"19":132,"20":132,"21":132,"22":6,"23":126,"24":31,"25":31,"26":95,"27":22,"28":22,"29":73,"30":73,"31":73,"32":73,"33":23,"34":23,"35":5,"36":5,"37":5,"38":50,"39":18,"40":18,"41":4,"42":4,"43":4,"44":64,"45":6,"46":6,"47":6,"48":58,"49":7,"50":7,"51":51,"52":51,"53":1},"b":{"1":[65,67],"2":[132,131],"3":[132,130],"4":[67,65],"5":[256,231,221],"6":[211,174,152],"7":[6,126],"8":[132,37],"9":[31,95],"10":[126,31],"11":[22,73],"12":[95,22],"13":[23,50],"14":[5,18],"15":[18,32],"16":[4,14],"17":[6,58],"18":[64,60],"19":[7,51],"20":[58,30]},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":4,"column":0},"end":{"line":6,"column":26}},"2":{"start":{"line":8,"column":0},"end":{"line":220,"column":2}},"3":{"start":{"line":17,"column":2},"end":{"line":18,"column":17}},"4":{"start":{"line":18,"column":4},"end":{"line":18,"column":17}},"5":{"start":{"line":20,"column":2},"end":{"line":20,"column":42}},"6":{"start":{"line":21,"column":2},"end":{"line":21,"column":39}},"7":{"start":{"line":22,"column":2},"end":{"line":22,"column":72}},"8":{"start":{"line":24,"column":2},"end":{"line":24,"column":44}},"9":{"start":{"line":25,"column":2},"end":{"line":25,"column":33}},"10":{"start":{"line":26,"column":2},"end":{"line":26,"column":23}},"11":{"start":{"line":28,"column":2},"end":{"line":28,"column":37}},"12":{"start":{"line":29,"column":2},"end":{"line":29,"column":22}},"13":{"start":{"line":32,"column":2},"end":{"line":39,"column":3}},"14":{"start":{"line":37,"column":4},"end":{"line":37,"column":19}},"15":{"start":{"line":38,"column":4},"end":{"line":38,"column":18}},"16":{"start":{"line":42,"column":2},"end":{"line":49,"column":3}},"17":{"start":{"line":47,"column":4},"end":{"line":47,"column":17}},"18":{"start":{"line":48,"column":4},"end":{"line":48,"column":16}},"19":{"start":{"line":51,"column":2},"end":{"line":51,"column":50}},"20":{"start":{"line":52,"column":2},"end":{"line":52,"column":47}},"21":{"start":{"line":55,"column":2},"end":{"line":56,"column":23}},"22":{"start":{"line":56,"column":4},"end":{"line":56,"column":23}},"23":{"start":{"line":59,"column":2},"end":{"line":69,"column":3}},"24":{"start":{"line":60,"column":4},"end":{"line":67,"column":6}},"25":{"start":{"line":68,"column":4},"end":{"line":68,"column":23}},"26":{"start":{"line":72,"column":2},"end":{"line":81,"column":3}},"27":{"start":{"line":73,"column":4},"end":{"line":79,"column":6}},"28":{"start":{"line":80,"column":4},"end":{"line":80,"column":23}},"29":{"start":{"line":83,"column":2},"end":{"line":83,"column":51}},"30":{"start":{"line":84,"column":2},"end":{"line":84,"column":48}},"31":{"start":{"line":85,"column":2},"end":{"line":85,"column":13}},"32":{"start":{"line":88,"column":2},"end":{"line":148,"column":3}},"33":{"start":{"line":89,"column":4},"end":{"line":97,"column":6}},"34":{"start":{"line":99,"column":4},"end":{"line":117,"column":5}},"35":{"start":{"line":100,"column":6},"end":{"line":107,"column":8}},"36":{"start":{"line":108,"column":6},"end":{"line":115,"column":8}},"37":{"start":{"line":116,"column":6},"end":{"line":116,"column":25}},"38":{"start":{"line":120,"column":7},"end":{"line":148,"column":3}},"39":{"start":{"line":121,"column":4},"end":{"line":129,"column":6}},"40":{"start":{"line":131,"column":4},"end":{"line":147,"column":5}},"41":{"start":{"line":132,"column":6},"end":{"line":138,"column":8}},"42":{"start":{"line":139,"column":6},"end":{"line":145,"column":8}},"43":{"start":{"line":146,"column":6},"end":{"line":146,"column":25}},"44":{"start":{"line":153,"column":2},"end":{"line":170,"column":3}},"45":{"start":{"line":154,"column":4},"end":{"line":161,"column":6}},"46":{"start":{"line":162,"column":4},"end":{"line":168,"column":6}},"47":{"start":{"line":169,"column":4},"end":{"line":169,"column":23}},"48":{"start":{"line":180,"column":2},"end":{"line":200,"column":3}},"49":{"start":{"line":191,"column":4},"end":{"line":198,"column":6}},"50":{"start":{"line":199,"column":4},"end":{"line":199,"column":23}},"51":{"start":{"line":203,"column":2},"end":{"line":217,"column":4}},"52":{"start":{"line":219,"column":2},"end":{"line":219,"column":21}},"53":{"start":{"line":222,"column":0},"end":{"line":222,"column":78}}},"branchMap":{"1":{"line":17,"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":17,"column":2}},{"start":{"line":17,"column":2},"end":{"line":17,"column":2}}]},"2":{"line":20,"type":"binary-expr","locations":[{"start":{"line":20,"column":18},"end":{"line":20,"column":33}},{"start":{"line":20,"column":37},"end":{"line":20,"column":41}}]},"3":{"line":21,"type":"binary-expr","locations":[{"start":{"line":21,"column":14},"end":{"line":21,"column":26}},{"start":{"line":21,"column":30},"end":{"line":21,"column":38}}]},"4":{"line":22,"type":"cond-expr","locations":[{"start":{"line":22,"column":42},"end":{"line":22,"column":46}},{"start":{"line":22,"column":49},"end":{"line":22,"column":71}}]},"5":{"line":33,"type":"binary-expr","locations":[{"start":{"line":33,"column":4},"end":{"line":33,"column":29}},{"start":{"line":34,"column":4},"end":{"line":34,"column":27}},{"start":{"line":35,"column":4},"end":{"line":35,"column":65}}]},"6":{"line":43,"type":"binary-expr","locations":[{"start":{"line":43,"column":4},"end":{"line":43,"column":29}},{"start":{"line":44,"column":4},"end":{"line":44,"column":27}},{"start":{"line":45,"column":4},"end":{"line":45,"column":69}}]},"7":{"line":55,"type":"if","locations":[{"start":{"line":55,"column":2},"end":{"line":55,"column":2}},{"start":{"line":55,"column":2},"end":{"line":55,"column":2}}]},"8":{"line":55,"type":"binary-expr","locations":[{"start":{"line":55,"column":6},"end":{"line":55,"column":17}},{"start":{"line":55,"column":21},"end":{"line":55,"column":31}}]},"9":{"line":59,"type":"if","locations":[{"start":{"line":59,"column":2},"end":{"line":59,"column":2}},{"start":{"line":59,"column":2},"end":{"line":59,"column":2}}]},"10":{"line":59,"type":"binary-expr","locations":[{"start":{"line":59,"column":6},"end":{"line":59,"column":17}},{"start":{"line":59,"column":21},"end":{"line":59,"column":44}}]},"11":{"line":72,"type":"if","locations":[{"start":{"line":72,"column":2},"end":{"line":72,"column":2}},{"start":{"line":72,"column":2},"end":{"line":72,"column":2}}]},"12":{"line":72,"type":"binary-expr","locations":[{"start":{"line":72,"column":6},"end":{"line":72,"column":16}},{"start":{"line":72,"column":20},"end":{"line":72,"column":45}}]},"13":{"line":88,"type":"if","locations":[{"start":{"line":88,"column":2},"end":{"line":88,"column":2}},{"start":{"line":88,"column":2},"end":{"line":88,"column":2}}]},"14":{"line":99,"type":"if","locations":[{"start":{"line":99,"column":4},"end":{"line":99,"column":4}},{"start":{"line":99,"column":4},"end":{"line":99,"column":4}}]},"15":{"line":120,"type":"if","locations":[{"start":{"line":120,"column":7},"end":{"line":120,"column":7}},{"start":{"line":120,"column":7},"end":{"line":120,"column":7},"skip":true}]},"16":{"line":131,"type":"if","locations":[{"start":{"line":131,"column":4},"end":{"line":131,"column":4}},{"start":{"line":131,"column":4},"end":{"line":131,"column":4}}]},"17":{"line":153,"type":"if","locations":[{"start":{"line":153,"column":2},"end":{"line":153,"column":2}},{"start":{"line":153,"column":2},"end":{"line":153,"column":2},"skip":true}]},"18":{"line":153,"type":"binary-expr","locations":[{"start":{"line":153,"column":7},"end":{"line":153,"column":25}},{"start":{"line":153,"column":29},"end":{"line":153,"column":46}}]},"19":{"line":180,"type":"if","locations":[{"start":{"line":180,"column":2},"end":{"line":180,"column":2}},{"start":{"line":180,"column":2},"end":{"line":180,"column":2}}]},"20":{"line":181,"type":"binary-expr","locations":[{"start":{"line":181,"column":4},"end":{"line":181,"column":36}},{"start":{"line":182,"column":4},"end":{"line":189,"column":5}}]}}},"/Users/agiammarchi/git/domdiff/cjs/utils.js":{"path":"/Users/agiammarchi/git/domdiff/cjs/utils.js","s":{"1":1,"2":2112,"3":2077,"4":35,"5":35,"6":1119,"7":35,"8":1,"9":1,"10":4985,"11":1,"12":1,"13":4353,"14":1,"15":1,"16":41,"17":41,"18":0,"19":41,"20":1093,"21":1093,"22":1093,"23":45,"24":45,"25":1093,"26":9,"27":1084,"28":32,"29":1,"30":1,"31":30,"32":1052,"33":1052,"34":30,"35":1,"36":1,"37":43,"38":1,"39":1,"40":87,"41":67,"42":20,"43":20,"44":20,"45":20,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":1,"59":2,"60":2,"61":2,"62":2,"63":2,"64":2,"65":1006,"66":2,"67":2,"68":1006,"69":2,"70":2000,"71":2000,"72":1000,"73":1000,"74":1000,"75":1000,"76":2,"77":2,"78":2,"79":952,"80":2,"81":2,"82":2,"83":2,"84":2,"85":54,"86":54,"87":863,"88":863,"89":54,"90":945,"91":945,"92":54,"93":54,"94":54,"95":54,"96":2,"97":1083,"98":1083,"99":2,"100":7,"101":7,"102":2,"103":1,"104":51,"105":51,"106":51,"107":51,"108":51,"109":372,"110":2,"111":370,"112":370,"113":370,"114":370,"115":3548,"116":3237,"117":311,"118":3548,"119":3548,"120":153,"121":153,"122":3548,"123":49,"124":3499,"125":49,"126":49,"127":49,"128":268,"129":93,"130":93,"131":93,"132":268,"133":49,"134":219,"135":219,"136":219,"137":219,"138":112,"139":112,"140":107,"141":107,"142":49,"143":1,"144":51,"145":51,"146":51,"147":51,"148":51,"149":3264,"150":147,"151":147,"152":147,"153":2058,"154":2058,"155":2058,"156":1059,"157":1059,"158":51,"159":51,"160":3264,"161":147,"162":147,"163":1059,"164":1008,"165":51,"166":1059,"167":1,"168":1000,"169":1000,"170":1000,"171":10000,"172":10000,"173":7345,"174":2655,"175":1000,"176":1,"177":51,"178":1},"b":{"1":[2077,35],"2":[0,41],"3":[1138,1138,1129],"4":[9,1084],"5":[1082,1075],"6":[13,30],"7":[19,11],"8":[67,20],"9":[0,1],"10":[0,0],"11":[0,2],"12":[1000,1000],"13":[1000,0],"14":[2,370],"15":[319,51],"16":[3237,311],"17":[3548,3178,2908],"18":[3701,2452,2189],"19":[49,3499],"20":[3548,192],"21":[361,300,231],"22":[49,219],"23":[219,0],"24":[112,107],"25":[219,207,125],"26":[147,2058,1059],"27":[950,1108],"28":[147,1059],"29":[1008,51],"30":[7345,2655],"31":[51,2]},"f":{"1":0},"fnMap":{"1":{"name":"(anonymous_1)","line":103,"loc":{"start":{"line":103,"column":2},"end":{"line":103,"column":14}},"skip":true}},"statementMap":{"1":{"start":{"line":2,"column":0},"end":{"line":11,"column":2}},"2":{"start":{"line":3,"column":2},"end":{"line":10,"column":3}},"3":{"start":{"line":4,"column":4},"end":{"line":4,"column":57}},"4":{"start":{"line":6,"column":4},"end":{"line":6,"column":67}},"5":{"start":{"line":7,"column":4},"end":{"line":8,"column":54}},"6":{"start":{"line":8,"column":6},"end":{"line":8,"column":54}},"7":{"start":{"line":9,"column":4},"end":{"line":9,"column":42}},"8":{"start":{"line":12,"column":0},"end":{"line":12,"column":24}},"9":{"start":{"line":14,"column":0},"end":{"line":14,"column":30}},"10":{"start":{"line":14,"column":23},"end":{"line":14,"column":29}},"11":{"start":{"line":15,"column":0},"end":{"line":15,"column":20}},"12":{"start":{"line":17,"column":0},"end":{"line":17,"column":24}},"13":{"start":{"line":17,"column":22},"end":{"line":17,"column":23}},"14":{"start":{"line":18,"column":0},"end":{"line":18,"column":28}},"15":{"start":{"line":20,"column":0},"end":{"line":49,"column":2}},"16":{"start":{"line":29,"column":2},"end":{"line":29,"column":37}},"17":{"start":{"line":31,"column":2},"end":{"line":32,"column":14}},"18":{"start":{"line":32,"column":4},"end":{"line":32,"column":14},"skip":true},"19":{"start":{"line":33,"column":2},"end":{"line":47,"column":3}},"20":{"start":{"line":34,"column":4},"end":{"line":34,"column":22}},"21":{"start":{"line":35,"column":4},"end":{"line":35,"column":22}},"22":{"start":{"line":36,"column":4},"end":{"line":43,"column":5}},"23":{"start":{"line":41,"column":6},"end":{"line":41,"column":10}},"24":{"start":{"line":42,"column":6},"end":{"line":42,"column":10}},"25":{"start":{"line":44,"column":4},"end":{"line":45,"column":23}},"26":{"start":{"line":45,"column":6},"end":{"line":45,"column":23}},"27":{"start":{"line":46,"column":4},"end":{"line":46,"column":22}},"28":{"start":{"line":48,"column":2},"end":{"line":48,"column":12}},"29":{"start":{"line":50,"column":0},"end":{"line":50,"column":26}},"30":{"start":{"line":52,"column":0},"end":{"line":70,"column":2}},"31":{"start":{"line":60,"column":2},"end":{"line":68,"column":5}},"32":{"start":{"line":66,"column":6},"end":{"line":66,"column":21}},"33":{"start":{"line":67,"column":6},"end":{"line":67,"column":18}},"34":{"start":{"line":69,"column":2},"end":{"line":69,"column":25}},"35":{"start":{"line":71,"column":0},"end":{"line":71,"column":32}},"36":{"start":{"line":73,"column":0},"end":{"line":77,"column":24}},"37":{"start":{"line":73,"column":47},"end":{"line":77,"column":23}},"38":{"start":{"line":78,"column":0},"end":{"line":78,"column":20}},"39":{"start":{"line":80,"column":0},"end":{"line":89,"column":2}},"40":{"start":{"line":81,"column":2},"end":{"line":88,"column":3}},"41":{"start":{"line":82,"column":4},"end":{"line":82,"column":49}},"42":{"start":{"line":84,"column":4},"end":{"line":84,"column":53}},"43":{"start":{"line":85,"column":4},"end":{"line":85,"column":51}},"44":{"start":{"line":86,"column":4},"end":{"line":86,"column":50}},"45":{"start":{"line":87,"column":4},"end":{"line":87,"column":27}},"46":{"start":{"line":90,"column":0},"end":{"line":90,"column":24}},"47":{"start":{"line":96,"column":0},"end":{"line":96,"column":20}},"48":{"start":{"line":97,"column":0},"end":{"line":97,"column":20}},"49":{"start":{"line":98,"column":0},"end":{"line":98,"column":15}},"50":{"start":{"line":99,"column":0},"end":{"line":99,"column":20}},"51":{"start":{"line":102,"column":0},"end":{"line":115,"column":1},"skip":true},"52":{"start":{"line":104,"column":4},"end":{"line":104,"column":25},"skip":true},"53":{"start":{"line":105,"column":4},"end":{"line":112,"column":6},"skip":true},"54":{"start":{"line":106,"column":20},"end":{"line":106,"column":41},"skip":true},"55":{"start":{"line":107,"column":20},"end":{"line":107,"column":39},"skip":true},"56":{"start":{"line":109,"column":8},"end":{"line":109,"column":35},"skip":true},"57":{"start":{"line":110,"column":8},"end":{"line":110,"column":51},"skip":true},"58":{"start":{"line":117,"column":0},"end":{"line":190,"column":2}},"59":{"start":{"line":128,"column":2},"end":{"line":128,"column":12}},"60":{"start":{"line":130,"column":2},"end":{"line":130,"column":79},"skip":true},"61":{"start":{"line":131,"column":2},"end":{"line":131,"column":31}},"62":{"start":{"line":132,"column":2},"end":{"line":132,"column":30}},"63":{"start":{"line":133,"column":2},"end":{"line":133,"column":16}},"64":{"start":{"line":135,"column":2},"end":{"line":136,"column":26}},"65":{"start":{"line":136,"column":4},"end":{"line":136,"column":26}},"66":{"start":{"line":138,"column":2},"end":{"line":138,"column":25}},"67":{"start":{"line":139,"column":2},"end":{"line":140,"column":35}},"68":{"start":{"line":140,"column":4},"end":{"line":140,"column":35}},"69":{"start":{"line":142,"column":2},"end":{"line":156,"column":3}},"70":{"start":{"line":143,"column":4},"end":{"line":143,"column":48}},"71":{"start":{"line":144,"column":4},"end":{"line":155,"column":5}},"72":{"start":{"line":145,"column":6},"end":{"line":145,"column":41}},"73":{"start":{"line":147,"column":6},"end":{"line":154,"column":7}},"74":{"start":{"line":148,"column":8},"end":{"line":148,"column":28}},"75":{"start":{"line":149,"column":8},"end":{"line":153,"column":10}},"76":{"start":{"line":158,"column":2},"end":{"line":158,"column":15}},"77":{"start":{"line":159,"column":2},"end":{"line":159,"column":15}},"78":{"start":{"line":160,"column":2},"end":{"line":160,"column":36}},"79":{"start":{"line":160,"column":32},"end":{"line":160,"column":36}},"80":{"start":{"line":162,"column":2},"end":{"line":162,"column":46}},"81":{"start":{"line":163,"column":2},"end":{"line":163,"column":29}},"82":{"start":{"line":164,"column":2},"end":{"line":164,"column":20}},"83":{"start":{"line":165,"column":2},"end":{"line":165,"column":14}},"84":{"start":{"line":166,"column":2},"end":{"line":180,"column":3}},"85":{"start":{"line":167,"column":4},"end":{"line":167,"column":29}},"86":{"start":{"line":168,"column":4},"end":{"line":171,"column":5}},"87":{"start":{"line":169,"column":6},"end":{"line":169,"column":33}},"88":{"start":{"line":170,"column":6},"end":{"line":170,"column":18}},"89":{"start":{"line":172,"column":4},"end":{"line":175,"column":5}},"90":{"start":{"line":173,"column":6},"end":{"line":173,"column":32}},"91":{"start":{"line":174,"column":6},"end":{"line":174,"column":19}},"92":{"start":{"line":176,"column":4},"end":{"line":176,"column":26}},"93":{"start":{"line":177,"column":4},"end":{"line":177,"column":16}},"94":{"start":{"line":178,"column":4},"end":{"line":178,"column":17}},"95":{"start":{"line":179,"column":4},"end":{"line":179,"column":19}},"96":{"start":{"line":181,"column":2},"end":{"line":184,"column":3}},"97":{"start":{"line":182,"column":4},"end":{"line":182,"column":31}},"98":{"start":{"line":183,"column":4},"end":{"line":183,"column":16}},"99":{"start":{"line":185,"column":2},"end":{"line":188,"column":3}},"100":{"start":{"line":186,"column":4},"end":{"line":186,"column":30}},"101":{"start":{"line":187,"column":4},"end":{"line":187,"column":17}},"102":{"start":{"line":189,"column":2},"end":{"line":189,"column":14}},"103":{"start":{"line":194,"column":0},"end":{"line":272,"column":2}},"104":{"start":{"line":203,"column":2},"end":{"line":203,"column":29}},"105":{"start":{"line":204,"column":2},"end":{"line":204,"column":15}},"106":{"start":{"line":205,"column":2},"end":{"line":205,"column":29}},"107":{"start":{"line":206,"column":2},"end":{"line":237,"column":3}},"108":{"start":{"line":206,"column":9},"end":{"line":237,"column":3}},"109":{"start":{"line":208,"column":4},"end":{"line":209,"column":18}},"110":{"start":{"line":209,"column":6},"end":{"line":209,"column":18},"skip":true},"111":{"start":{"line":210,"column":4},"end":{"line":210,"column":15}},"112":{"start":{"line":212,"column":4},"end":{"line":212,"column":31},"skip":true},"113":{"start":{"line":213,"column":4},"end":{"line":213,"column":19}},"114":{"start":{"line":214,"column":4},"end":{"line":236,"column":5}},"115":{"start":{"line":215,"column":6},"end":{"line":219,"column":7}},"116":{"start":{"line":216,"column":8},"end":{"line":216,"column":27}},"117":{"start":{"line":218,"column":8},"end":{"line":218,"column":31}},"118":{"start":{"line":220,"column":6},"end":{"line":220,"column":16}},"119":{"start":{"line":221,"column":6},"end":{"line":231,"column":7}},"120":{"start":{"line":229,"column":8},"end":{"line":229,"column":12}},"121":{"start":{"line":230,"column":8},"end":{"line":230,"column":12}},"122":{"start":{"line":232,"column":6},"end":{"line":234,"column":7}},"123":{"start":{"line":233,"column":8},"end":{"line":233,"column":20}},"124":{"start":{"line":235,"column":6},"end":{"line":235,"column":20}},"125":{"start":{"line":239,"column":2},"end":{"line":239,"column":41}},"126":{"start":{"line":240,"column":2},"end":{"line":240,"column":32}},"127":{"start":{"line":241,"column":2},"end":{"line":270,"column":3}},"128":{"start":{"line":242,"column":4},"end":{"line":254,"column":5}},"129":{"start":{"line":251,"column":6},"end":{"line":251,"column":29}},"130":{"start":{"line":252,"column":6},"end":{"line":252,"column":10}},"131":{"start":{"line":253,"column":6},"end":{"line":253,"column":10}},"132":{"start":{"line":255,"column":4},"end":{"line":256,"column":12}},"133":{"start":{"line":256,"column":6},"end":{"line":256,"column":12}},"134":{"start":{"line":257,"column":4},"end":{"line":257,"column":15}},"135":{"start":{"line":259,"column":4},"end":{"line":259,"column":31},"skip":true},"136":{"start":{"line":260,"column":4},"end":{"line":260,"column":14}},"137":{"start":{"line":261,"column":4},"end":{"line":269,"column":5}},"138":{"start":{"line":263,"column":6},"end":{"line":263,"column":10}},"139":{"start":{"line":264,"column":6},"end":{"line":264,"column":34}},"140":{"start":{"line":267,"column":6},"end":{"line":267,"column":10}},"141":{"start":{"line":268,"column":6},"end":{"line":268,"column":33}},"142":{"start":{"line":271,"column":2},"end":{"line":271,"column":14}},"143":{"start":{"line":274,"column":0},"end":{"line":335,"column":2}},"144":{"start":{"line":285,"column":2},"end":{"line":285,"column":23}},"145":{"start":{"line":286,"column":2},"end":{"line":286,"column":29}},"146":{"start":{"line":287,"column":2},"end":{"line":287,"column":34}},"147":{"start":{"line":288,"column":2},"end":{"line":288,"column":12}},"148":{"start":{"line":289,"column":2},"end":{"line":313,"column":3}},"149":{"start":{"line":290,"column":4},"end":{"line":312,"column":5}},"150":{"start":{"line":292,"column":8},"end":{"line":292,"column":22}},"151":{"start":{"line":293,"column":8},"end":{"line":293,"column":23}},"152":{"start":{"line":294,"column":8},"end":{"line":294,"column":14}},"153":{"start":{"line":297,"column":8},"end":{"line":297,"column":46}},"154":{"start":{"line":298,"column":8},"end":{"line":307,"column":10}},"155":{"start":{"line":308,"column":8},"end":{"line":308,"column":14}},"156":{"start":{"line":310,"column":8},"end":{"line":310,"column":23}},"157":{"start":{"line":311,"column":8},"end":{"line":311,"column":14}},"158":{"start":{"line":314,"column":2},"end":{"line":314,"column":8}},"159":{"start":{"line":315,"column":2},"end":{"line":334,"column":3}},"160":{"start":{"line":316,"column":4},"end":{"line":333,"column":5}},"161":{"start":{"line":318,"column":8},"end":{"line":318,"column":23}},"162":{"start":{"line":319,"column":8},"end":{"line":319,"column":14}},"163":{"start":{"line":322,"column":8},"end":{"line":331,"column":12}},"164":{"start":{"line":323,"column":10},"end":{"line":323,"column":25}},"165":{"start":{"line":325,"column":10},"end":{"line":331,"column":12}},"166":{"start":{"line":332,"column":8},"end":{"line":332,"column":14}},"167":{"start":{"line":337,"column":0},"end":{"line":348,"column":1}},"168":{"start":{"line":338,"column":2},"end":{"line":338,"column":13}},"169":{"start":{"line":339,"column":2},"end":{"line":339,"column":18}},"170":{"start":{"line":340,"column":2},"end":{"line":346,"column":3}},"171":{"start":{"line":341,"column":4},"end":{"line":341,"column":38}},"172":{"start":{"line":342,"column":4},"end":{"line":345,"column":19}},"173":{"start":{"line":343,"column":6},"end":{"line":343,"column":15}},"174":{"start":{"line":345,"column":6},"end":{"line":345,"column":19}},"175":{"start":{"line":347,"column":2},"end":{"line":347,"column":12}},"176":{"start":{"line":350,"column":0},"end":{"line":394,"column":2}},"177":{"start":{"line":365,"column":2},"end":{"line":393,"column":4}},"178":{"start":{"line":395,"column":0},"end":{"line":395,"column":30}}},"branchMap":{"1":{"line":3,"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":3,"column":2}},{"start":{"line":3,"column":2},"end":{"line":3,"column":2}}]},"2":{"line":31,"type":"if","locations":[{"start":{"line":31,"column":2},"end":{"line":31,"column":2},"skip":true},{"start":{"line":31,"column":2},"end":{"line":31,"column":2}}]},"3":{"line":37,"type":"binary-expr","locations":[{"start":{"line":37,"column":6},"end":{"line":37,"column":17}},{"start":{"line":38,"column":6},"end":{"line":38,"column":17}},{"start":{"line":39,"column":6},"end":{"line":39,"column":41}}]},"4":{"line":44,"type":"if","locations":[{"start":{"line":44,"column":4},"end":{"line":44,"column":4}},{"start":{"line":44,"column":4},"end":{"line":44,"column":4}}]},"5":{"line":61,"type":"binary-expr","locations":[{"start":{"line":61,"column":4},"end":{"line":61,"column":29}},{"start":{"line":62,"column":4},"end":{"line":65,"column":5}}]},"6":{"line":73,"type":"cond-expr","locations":[{"start":{"line":74,"column":14},"end":{"line":74,"column":29}},{"start":{"line":75,"column":15},"end":{"line":77,"column":22}}]},"7":{"line":75,"type":"cond-expr","locations":[{"start":{"line":76,"column":16},"end":{"line":76,"column":48}},{"start":{"line":77,"column":16},"end":{"line":77,"column":22}}]},"8":{"line":81,"type":"if","locations":[{"start":{"line":81,"column":2},"end":{"line":81,"column":2}},{"start":{"line":81,"column":2},"end":{"line":81,"column":2}}]},"9":{"line":102,"type":"cond-expr","locations":[{"start":{"line":103,"column":2},"end":{"line":113,"column":3},"skip":true},{"start":{"line":114,"column":2},"end":{"line":114,"column":5},"skip":true}]},"10":{"line":110,"type":"cond-expr","locations":[{"start":{"line":110,"column":19},"end":{"line":110,"column":36},"skip":true},{"start":{"line":110,"column":40},"end":{"line":110,"column":41},"skip":true}]},"11":{"line":130,"type":"cond-expr","locations":[{"start":{"line":130,"column":48},"end":{"line":130,"column":61},"skip":true},{"start":{"line":130,"column":64},"end":{"line":130,"column":78},"skip":true}]},"12":{"line":144,"type":"if","locations":[{"start":{"line":144,"column":4},"end":{"line":144,"column":4}},{"start":{"line":144,"column":4},"end":{"line":144,"column":4}}]},"13":{"line":147,"type":"if","locations":[{"start":{"line":147,"column":6},"end":{"line":147,"column":6}},{"start":{"line":147,"column":6},"end":{"line":147,"column":6},"skip":true}]},"14":{"line":208,"type":"if","locations":[{"start":{"line":208,"column":4},"end":{"line":208,"column":4},"skip":true},{"start":{"line":208,"column":4},"end":{"line":208,"column":4}}]},"15":{"line":212,"type":"cond-expr","locations":[{"start":{"line":212,"column":13},"end":{"line":212,"column":21},"skip":true},{"start":{"line":212,"column":24},"end":{"line":212,"column":30},"skip":true}]},"16":{"line":215,"type":"if","locations":[{"start":{"line":215,"column":6},"end":{"line":215,"column":6}},{"start":{"line":215,"column":6},"end":{"line":215,"column":6}}]},"17":{"line":215,"type":"binary-expr","locations":[{"start":{"line":215,"column":10},"end":{"line":215,"column":18}},{"start":{"line":215,"column":23},"end":{"line":215,"column":30}},{"start":{"line":215,"column":34},"end":{"line":215,"column":65}}]},"18":{"line":222,"type":"binary-expr","locations":[{"start":{"line":222,"column":8},"end":{"line":222,"column":16}},{"start":{"line":223,"column":8},"end":{"line":223,"column":16}},{"start":{"line":224,"column":8},"end":{"line":227,"column":9}}]},"19":{"line":232,"type":"if","locations":[{"start":{"line":232,"column":6},"end":{"line":232,"column":6}},{"start":{"line":232,"column":6},"end":{"line":232,"column":6}}]},"20":{"line":232,"type":"binary-expr","locations":[{"start":{"line":232,"column":10},"end":{"line":232,"column":20}},{"start":{"line":232,"column":24},"end":{"line":232,"column":34}}]},"21":{"line":243,"type":"binary-expr","locations":[{"start":{"line":243,"column":6},"end":{"line":243,"column":11}},{"start":{"line":244,"column":6},"end":{"line":244,"column":11}},{"start":{"line":245,"column":6},"end":{"line":248,"column":7}}]},"22":{"line":255,"type":"if","locations":[{"start":{"line":255,"column":4},"end":{"line":255,"column":4}},{"start":{"line":255,"column":4},"end":{"line":255,"column":4}}]},"23":{"line":259,"type":"cond-expr","locations":[{"start":{"line":259,"column":13},"end":{"line":259,"column":21},"skip":true},{"start":{"line":259,"column":24},"end":{"line":259,"column":30},"skip":true}]},"24":{"line":261,"type":"if","locations":[{"start":{"line":261,"column":4},"end":{"line":261,"column":4}},{"start":{"line":261,"column":4},"end":{"line":261,"column":4}}]},"25":{"line":261,"type":"binary-expr","locations":[{"start":{"line":261,"column":8},"end":{"line":261,"column":16}},{"start":{"line":261,"column":21},"end":{"line":261,"column":28}},{"start":{"line":261,"column":32},"end":{"line":261,"column":63}}]},"26":{"line":290,"type":"switch","locations":[{"start":{"line":291,"column":6},"end":{"line":294,"column":14}},{"start":{"line":295,"column":6},"end":{"line":308,"column":14}},{"start":{"line":309,"column":6},"end":{"line":311,"column":14}}]},"27":{"line":304,"type":"cond-expr","locations":[{"start":{"line":305,"column":12},"end":{"line":305,"column":46}},{"start":{"line":306,"column":12},"end":{"line":306,"column":18}}]},"28":{"line":316,"type":"switch","locations":[{"start":{"line":317,"column":6},"end":{"line":319,"column":14}},{"start":{"line":320,"column":6},"end":{"line":332,"column":14}}]},"29":{"line":322,"type":"if","locations":[{"start":{"line":322,"column":8},"end":{"line":322,"column":8}},{"start":{"line":322,"column":8},"end":{"line":322,"column":8}}]},"30":{"line":342,"type":"if","locations":[{"start":{"line":342,"column":4},"end":{"line":342,"column":4}},{"start":{"line":342,"column":4},"end":{"line":342,"column":4}}]},"31":{"line":366,"type":"binary-expr","locations":[{"start":{"line":366,"column":4},"end":{"line":374,"column":5}},{"start":{"line":375,"column":4},"end":{"line":384,"column":5}}]}}}} \ No newline at end of file diff --git a/coverage/lcov-report/base.css b/coverage/lcov-report/base.css deleted file mode 100644 index 29737bc..0000000 --- a/coverage/lcov-report/base.css +++ /dev/null @@ -1,213 +0,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) } -/* dark yellow (gold) */ -.medium .chart { border:1px solid #f9cd0b; } -.status-line.medium, .medium .cover-fill { background: #f9cd0b; } -/* light yellow */ -.medium { background: #fff4c2; } -/* light gray */ -span.cline-neutral { background: #eaeaea; } - -.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; } - - -.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; -} diff --git a/coverage/lcov-report/cjs/index.html b/coverage/lcov-report/cjs/index.html deleted file mode 100644 index 55497cc..0000000 --- a/coverage/lcov-report/cjs/index.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - Code coverage report for cjs/ - - - - - - - -
-
-

- all files cjs/ -

-
-
- 100% - Statements - 231/231 -
-
- 100% - Branches - 110/110 -
-
- 100% - Functions - 1/1 -
-
- 100% - Lines - 226/226 -
-
- 7 statements, 1 function, 7 branches - Ignored      -
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
index.js
100%53/53100%42/42100%0/0100%53/53
utils.js
100%178/178100%68/68100%1/1100%173/173
-
-
- - - - - - - diff --git a/coverage/lcov-report/cjs/index.js.html b/coverage/lcov-report/cjs/index.js.html deleted file mode 100644 index e0b0c0a..0000000 --- a/coverage/lcov-report/cjs/index.js.html +++ /dev/null @@ -1,731 +0,0 @@ - - - - Code coverage report for cjs/index.js - - - - - - - -
-
-

- all files / cjs/ index.js -

-
-
- 100% - Statements - 53/53 -
-
- 100% - Branches - 42/42 -
-
- 100% - Functions - 0/0 -
-
- 100% - Lines - 53/53 -
-
-
-
-

-
-
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 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223  -  -  - -  -  -  - -  -  -  -  -  -  -  -  -132× -65× -  -132× -132× -132× -  -132× -132× -132× -  -132× -132× -  -  -132× -  -  -  -  -124× -124× -  -  -  -132× -  -  -  -  -79× -79× -  -  -132× -132× -  -  -132× - -  -  -126× -31× -  -  -  -  -  -  -  -31× -  -  -  -95× -22× -  -  -  -  -  -  -22× -  -  -73× -73× -73× -  -  -73× -23× -  -  -  -  -  -  -  -  -  -23× - -  -  -  -  -  -  -  - -  -  -  -  -  -  -  - -  -  -  -50× -18× -  -  -  -  -  -  -  -  -  -18× - -  -  -  -  -  -  - -  -  -  -  -  -  - -  -  -  -  -  -  -64× - -  -  -  -  -  -  -  - -  -  -  -  -  -  - -  -  -  -  -  -  -  -  -  -  -58× -  -  -  -  -  -  -  -  -  -  - -  -  -  -  -  -  -  - -  -  -  -51× -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -51× -  -  - - 
'use strict';
-/*! (c) 2018 Andrea Giammarchi (ISC) */
- 
-const {
-  eqeq, identity, indexOf, isReversed, next, append, remove, smartDiff
-} = require('./utils.js');
- 
-const domdiff = (
-  parentNode,     // where changes happen
-  currentNodes,   // Array of current items/nodes
-  futureNodes,    // Array of future items/nodes
-  options         // optional object with one of the following properties
-                  //  before: domNode
-                  //  compare(generic, generic) => true if same generic
-                  //  node(generic) => Node
-) => {
-  if (!options)
-    options = {};
- 
-  const compare = options.compare || eqeq;
-  const get = options.node || identity;
-  const before = options.before == null ? null : get(options.before, 0);
- 
-  const currentLength = currentNodes.length;
-  let currentEnd = currentLength;
-  let currentStart = 0;
- 
-  let futureEnd = futureNodes.length;
-  let futureStart = 0;
- 
-  // common prefix
-  while (
-    currentStart < currentEnd &&
-    futureStart < futureEnd &&
-    compare(currentNodes[currentStart], futureNodes[futureStart])
-  ) {
-    currentStart++;
-    futureStart++;
-  }
- 
-  // common suffix
-  while (
-    currentStart < currentEnd &&
-    futureStart < futureEnd &&
-    compare(currentNodes[currentEnd - 1], futureNodes[futureEnd - 1])
-  ) {
-    currentEnd--;
-    futureEnd--;
-  }
- 
-  const currentSame = currentStart === currentEnd;
-  const futureSame = futureStart === futureEnd;
- 
-  // same list
-  if (currentSame && futureSame)
-    return futureNodes;
- 
-  // only stuff to add
-  if (currentSame && futureStart < futureEnd) {
-    append(
-      get,
-      parentNode,
-      futureNodes,
-      futureStart,
-      futureEnd,
-      next(get, currentNodes, currentStart, currentLength, before)
-    );
-    return futureNodes;
-  }
- 
-  // only stuff to remove
-  if (futureSame && currentStart < currentEnd) {
-    remove(
-      get,
-      parentNode,
-      currentNodes,
-      currentStart,
-      currentEnd
-    );
-    return futureNodes;
-  }
- 
-  const currentChanges = currentEnd - currentStart;
-  const futureChanges = futureEnd - futureStart;
-  let i = -1;
- 
-  // 2 simple indels: the shortest sequence is a subsequence of the longest
-  if (currentChanges < futureChanges) {
-    i = indexOf(
-      futureNodes,
-      futureStart,
-      futureEnd,
-      currentNodes,
-      currentStart,
-      currentEnd,
-      compare
-    );
-    // inner diff
-    if (-1 < i) {
-      append(
-        get,
-        parentNode,
-        futureNodes,
-        futureStart,
-        i,
-        get(currentNodes[currentStart], 0)
-      );
-      append(
-        get,
-        parentNode,
-        futureNodes,
-        i + currentChanges,
-        futureEnd,
-        next(get, currentNodes, currentEnd, currentLength, before)
-      );
-      return futureNodes;
-    }
-  }
-  /* istanbul ignore else */
-  else if (futureChanges < currentChanges) {
-    i = indexOf(
-      currentNodes,
-      currentStart,
-      currentEnd,
-      futureNodes,
-      futureStart,
-      futureEnd,
-      compare
-    );
-    // outer diff
-    if (-1 < i) {
-      remove(
-        get,
-        parentNode,
-        currentNodes,
-        currentStart,
-        i
-      );
-      remove(
-        get,
-        parentNode,
-        currentNodes,
-        i + futureChanges,
-        currentEnd
-      );
-      return futureNodes;
-    }
-  }
- 
-  // common case with one replacement for many nodes
-  // or many nodes replaced for a single one
-  /* istanbul ignore else */
-  if ((currentChanges < 2 || futureChanges < 2)) {
-    append(
-      get,
-      parentNode,
-      futureNodes,
-      futureStart,
-      futureEnd,
-      get(currentNodes[currentStart], 0)
-    );
-    remove(
-      get,
-      parentNode,
-      currentNodes,
-      currentStart,
-      currentEnd
-    );
-    return futureNodes;
-  }
- 
-  // the half match diff part has been skipped in petit-dom
-  // https://github.com/yelouafi/petit-dom/blob/bd6f5c919b5ae5297be01612c524c40be45f14a7/src/vdom.js#L391-L397
-  // accordingly, I think it's safe to skip in here too
-  // if one day it'll come out like the speediest thing ever to do
-  // then I might add it in here too
- 
-  // Extra: before going too fancy, what about reversed lists ?
-  //        This should bail out pretty quickly if that's not the case.
-  if (
-    currentChanges === futureChanges &&
-    isReversed(
-      futureNodes,
-      futureEnd,
-      currentNodes,
-      currentStart,
-      currentEnd,
-      compare
-    )
-  ) {
-    append(
-      get,
-      parentNode,
-      futureNodes,
-      futureStart,
-      futureEnd,
-      next(get, currentNodes, currentEnd, currentLength, before)
-    );
-    return futureNodes;
-  }
- 
-  // last resort through a smart diff
-  smartDiff(
-    get,
-    parentNode,
-    futureNodes,
-    futureStart,
-    futureEnd,
-    futureChanges,
-    currentNodes,
-    currentStart,
-    currentEnd,
-    currentChanges,
-    currentLength,
-    compare,
-    before
-  );
- 
-  return futureNodes;
-};
- 
-Object.defineProperty(exports, '__esModule', {value: true}).default = domdiff;
- 
-
-
- - - - - - - diff --git a/coverage/lcov-report/cjs/utils.js.html b/coverage/lcov-report/cjs/utils.js.html deleted file mode 100644 index 3371249..0000000 --- a/coverage/lcov-report/cjs/utils.js.html +++ /dev/null @@ -1,1254 +0,0 @@ - - - - Code coverage report for cjs/utils.js - - - - - - - -
-
-

- all files / cjs/ utils.js -

-
-
- 100% - Statements - 178/178 -
-
- 100% - Branches - 68/68 -
-
- 100% - Functions - 1/1 -
-
- 100% - Lines - 173/173 -
-
- 7 statements, 1 function, 7 branches - Ignored      -
-
-
-
-

-
-
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 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336 -337 -338 -339 -340 -341 -342 -343 -344 -345 -346 -347 -348 -349 -350 -351 -352 -353 -354 -355 -356 -357 -358 -359 -360 -361 -362 -363 -364 -365 -366 -367 -368 -369 -370 -371 -372 -373 -374 -375 -376 -377 -378 -379 -380 -381 -382 -383 -384 -385 -386 -387 -388 -389 -390 -391 -392 -393 -394 -395 -396  - -2112× -2077× -  -35× -35× -1119× -35× -  -  - -  -4985× - -  -4353× - -  - -  -  -  -  -  -  -  -  -41× -  -41× - -41× -1093× -1093× -1093× -  -  -  -  -45× -45× -  -1093× - -1084× -  -32× -  - -  - -  -  -  -  -  -  -  -30× -  -  -  -  -  -1052× -1052× -  -30× -  - -  -43× -  -  -  -  - -  - -87× -67× -  -20× -20× -20× -20× -  -  - -  -  -  -  -  - - - - -  -  - -  - - - - -  - - -  -  -  -  -  -  - -  -  -  -  -  -  -  -  -  -  - -  - - - - -  - -1006× -  - - -1006× -  - -2000× -2000× -1000× -  -1000× -1000× -1000× -  -  -  -  -  -  -  -  - - -952× -  - - - - - -54× -54× -863× -863× -  -54× -945× -945× -  -54× -54× -54× -54× -  - -1083× -1083× -  - - - -  - -  -  -  -  - -  -  -  -  -  -  -  -  -51× -51× -51× -51× -  -372× - -370× -  -370× -370× -370× -3548× -3237× -  -311× -  -3548× -3548× -  -  -  -  -  -  -  -153× -153× -  -3548× -49× -  -3499× -  -  -  -49× -49× -49× -268× -  -  -  -  -  -  -  -  -93× -93× -93× -  -268× -49× -219× -  -219× -219× -219× -  -112× -112× -  -  -107× -107× -  -  -49× -  -  - -  -  -  -  -  -  -  -  -  -  -51× -51× -51× -51× -51× -3264× -  -147× -147× -147× -  -  -2058× -2058× -  -  -  -  -  -  -  -  -  -2058× -  -1059× -1059× -  -  -51× -51× -3264× -  -147× -147× -  -  -1059× -1008× -  -51× -  -  -  -  -  -  -1059× -  -  -  -  - -1000× -1000× -1000× -10000× -10000× -7345× -  -2655× -  -1000× -  -  - -  -  -  -  -  -  -  -  -  -  -  -  -  -  -51× -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - - 
'use strict';
-const append = (get, parent, children, start, end, before) => {
-  if ((end - start) < 2)
-    parent.insertBefore(get(children[start], 1), before);
-  else {
-    const fragment = parent.ownerDocument.createDocumentFragment();
-    while (start < end)
-      fragment.appendChild(get(children[start++], 1));
-    parent.insertBefore(fragment, before);
-  }
-};
-exports.append = append;
- 
-const eqeq = (a, b) => a == b;
-exports.eqeq = eqeq;
- 
-const identity = O => O;
-exports.identity = identity;
- 
-const indexOf = (
-  moreNodes,
-  moreStart,
-  moreEnd,
-  lessNodes,
-  lessStart,
-  lessEnd,
-  compare
-) => {
-  const length = lessEnd - lessStart;
-  /* istanbul ignore if */
-  Iif (length < 1)
-    return -1;
-  while ((moreEnd - moreStart) >= length) {
-    let m = moreStart;
-    let l = lessStart;
-    while (
-      m < moreEnd &&
-      l < lessEnd &&
-      compare(moreNodes[m], lessNodes[l])
-    ) {
-      m++;
-      l++;
-    }
-    if (l === lessEnd)
-      return moreStart;
-    moreStart = m + 1;
-  }
-  return -1;
-};
-exports.indexOf = indexOf;
- 
-const isReversed = (
-  futureNodes,
-  futureEnd,
-  currentNodes,
-  currentStart,
-  currentEnd,
-  compare
-) => {
-  while (
-    currentStart < currentEnd &&
-    compare(
-      currentNodes[currentStart],
-      futureNodes[futureEnd - 1]
-    )) {
-      currentStart++;
-      futureEnd--;
-    };
-  return futureEnd === 0;
-};
-exports.isReversed = isReversed;
- 
-const next = (get, list, i, length, before) => i < length ?
-              get(list[i], 0) :
-              (0 < i ?
-                get(list[i - 1], -0).nextSibling :
-                before);
-exports.next = next;
- 
-const remove = (get, parent, children, start, end) => {
-  if ((end - start) < 2)
-    parent.removeChild(get(children[start], -1));
-  else {
-    const range = parent.ownerDocument.createRange();
-    range.setStartBefore(get(children[start], -1));
-    range.setEndAfter(get(children[end - 1], -1));
-    range.deleteContents();
-  }
-};
-exports.remove = remove;
- 
-// - - - - - - - - - - - - - - - - - - -
-// diff related constants and utilities
-// - - - - - - - - - - - - - - - - - - -
- 
-const DELETION = -1;
-const INSERTION = 1;
-const SKIP = 0;
-const SKIP_OND = 50;
- 
-/* istanbul ignore next */
-const Rel = typeof Map === 'undefined' ?
-  function () {
-    const k = [], v = [];
-    return {
-      has: value => -1 < k.indexOf(value),
-      get: value => v[k.indexOf(value)],
-      set: value => {
-        const i = k.indexOf(value);
-        v[i < 0 ? (k.push(value) - 1) : i] = value;
-      }
-    };
-  } :
-  Map
-;
- 
-const HS = (
-  futureNodes,
-  futureStart,
-  futureEnd,
-  futureChanges,
-  currentNodes,
-  currentStart,
-  currentEnd,
-  currentChanges
-) => {
- 
-  let k = 0;
-  /* istanbul ignore next */
-  let minLen = futureChanges < currentChanges ? futureChanges : currentChanges;
-  const link = Array(minLen++);
-  const tresh = Array(minLen);
-  tresh[0] = -1;
- 
-  for (let i = 1; i < minLen; i++)
-    tresh[i] = currentEnd;
- 
-  const keymap = new Rel;
-  for (let i = currentStart; i < currentEnd; i++)
-    keymap.set(currentNodes[i], i);
- 
-  for (let i = futureStart; i < futureEnd; i++) {
-    const idxInOld = keymap.get(futureNodes[i]);
-    if (idxInOld != null) {
-      k = findK(tresh, minLen, idxInOld);
-      /* istanbul ignore else */
-      Eif (-1 < k) {
-        tresh[k] = idxInOld;
-        link[k] = {
-          newi: i,
-          oldi: idxInOld,
-          prev: link[k - 1]
-        };
-      }
-    }
-  }
- 
-  k = --minLen;
-  --currentEnd;
-  while (tresh[k] > currentEnd) --k;
- 
-  minLen = currentChanges + futureChanges - k;
-  const diff = Array(minLen);
-  let ptr = link[k];
-  --futureEnd;
-  while (ptr) {
-    const {newi, oldi} = ptr;
-    while (futureEnd > newi) {
-      diff[--minLen] = INSERTION;
-      --futureEnd;
-    }
-    while (currentEnd > oldi) {
-      diff[--minLen] = DELETION;
-      --currentEnd;
-    }
-    diff[--minLen] = SKIP;
-    --futureEnd;
-    --currentEnd;
-    ptr = ptr.prev;
-  }
-  while (futureEnd >= futureStart) {
-    diff[--minLen] = INSERTION;
-    --futureEnd;
-  }
-  while (currentEnd >= currentStart) {
-    diff[--minLen] = DELETION;
-    --currentEnd;
-  }
-  return diff;
-};
- 
-// this is pretty much the same petit-dom code without the delete map part
-// https://github.com/yelouafi/petit-dom/blob/bd6f5c919b5ae5297be01612c524c40be45f14a7/src/vdom.js#L556-L561
-const OND = (
-  futureNodes,
-  futureStart,
-  rows,
-  currentNodes,
-  currentStart,
-  cols,
-  compare
-) => {
-  const length = rows + cols;
-  const v = [];
-  let d, k, r, c, pv, cv, pd;
-  outer: for (d = 0; d <= length; d++) {
-    /* istanbul ignore if */
-    if (d > SKIP_OND)
-      return null;
-    pd = d - 1;
-    /* istanbul ignore next */
-    pv = d ? v[d - 1] : [0, 0];
-    cv = v[d] = [];
-    for (k = -d; k <= d; k += 2) {
-      if (k === -d || (k !== d && pv[pd + k - 1] < pv[pd + k + 1])) {
-        c = pv[pd + k + 1];
-      } else {
-        c = pv[pd + k - 1] + 1;
-      }
-      r = c - k;
-      while (
-        c < cols &&
-        r < rows &&
-        compare(
-          currentNodes[currentStart + c],
-          futureNodes[futureStart + r]
-        )
-      ) {
-        c++;
-        r++;
-      }
-      if (c === cols && r === rows) {
-        break outer;
-      }
-      cv[d + k] = c;
-    }
-  }
- 
-  const diff = Array(d / 2 + length / 2);
-  let diffIdx = diff.length - 1;
-  for (d = v.length - 1; d >= 0; d--) {
-    while (
-      c > 0 &&
-      r > 0 &&
-      compare(
-        currentNodes[currentStart + c - 1],
-        futureNodes[futureStart + r - 1]
-      )
-    ) {
-      // diagonal edge = equality
-      diff[diffIdx--] = SKIP;
-      c--;
-      r--;
-    }
-    if (!d)
-      break;
-    pd = d - 1;
-    /* istanbul ignore next */
-    pv = d ? v[d - 1] : [0, 0];
-    k = c - r;
-    if (k === -d || (k !== d && pv[pd + k - 1] < pv[pd + k + 1])) {
-      // vertical edge = insertion
-      r--;
-      diff[diffIdx--] = INSERTION;
-    } else {
-      // horizontal edge = deletion
-      c--;
-      diff[diffIdx--] = DELETION;
-    }
-  }
-  return diff;
-};
- 
-const applyDiff = (
-  diff,
-  get,
-  parentNode,
-  futureNodes,
-  futureStart,
-  currentNodes,
-  currentStart,
-  currentLength,
-  before
-) => {
-  const live = new Rel;
-  const length = diff.length;
-  let currentIndex = currentStart;
-  let i = 0;
-  while (i < length) {
-    switch (diff[i++]) {
-      case SKIP:
-        futureStart++;
-        currentIndex++;
-        break;
-      case INSERTION:
-        // TODO: bulk appends for sequential nodes
-        live.set(futureNodes[futureStart], 1);
-        append(
-          get,
-          parentNode,
-          futureNodes,
-          futureStart++,
-          futureStart,
-          currentIndex < currentLength ?
-            get(currentNodes[currentIndex], 1) :
-            before
-        );
-        break;
-      case DELETION:
-        currentIndex++;
-        break;
-    }
-  }
-  i = 0;
-  while (i < length) {
-    switch (diff[i++]) {
-      case SKIP:
-        currentStart++;
-        break;
-      case DELETION:
-        // TODO: bulk removes for sequential nodes
-        if (live.has(currentNodes[currentStart]))
-          currentStart++;
-        else
-          remove(
-            get,
-            parentNode,
-            currentNodes,
-            currentStart++,
-            currentStart
-          );
-        break;
-    }
-  }
-};
- 
-const findK = (ktr, length, j) => {
-  let lo = 1;
-  let hi = length;
-  while (lo < hi) {
-    const mid = ((lo + hi) / 2) >>> 0;
-    if (j < ktr[mid])
-      hi = mid;
-    else
-      lo = mid + 1;
-  }
-  return lo;
-}
- 
-const smartDiff = (
-  get,
-  parentNode,
-  futureNodes,
-  futureStart,
-  futureEnd,
-  futureChanges,
-  currentNodes,
-  currentStart,
-  currentEnd,
-  currentChanges,
-  currentLength,
-  compare,
-  before
-) => {
-  applyDiff(
-    OND(
-      futureNodes,
-      futureStart,
-      futureChanges,
-      currentNodes,
-      currentStart,
-      currentChanges,
-      compare
-    ) ||
-    HS(
-      futureNodes,
-      futureStart,
-      futureEnd,
-      futureChanges,
-      currentNodes,
-      currentStart,
-      currentEnd,
-      currentChanges
-    ),
-    get,
-    parentNode,
-    futureNodes,
-    futureStart,
-    currentNodes,
-    currentStart,
-    currentLength,
-    before
-  );
-};
-exports.smartDiff = smartDiff;
- 
-
-
- - - - - - - diff --git a/coverage/lcov-report/index.html b/coverage/lcov-report/index.html deleted file mode 100644 index 87f852f..0000000 --- a/coverage/lcov-report/index.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - Code coverage report for All files - - - - - - - -
-
-

- / -

-
-
- 100% - Statements - 231/231 -
-
- 100% - Branches - 110/110 -
-
- 100% - Functions - 1/1 -
-
- 100% - Lines - 226/226 -
-
- 7 statements, 1 function, 7 branches - Ignored      -
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
cjs/
100%231/231100%110/110100%1/1100%226/226
-
-
- - - - - - - diff --git a/coverage/lcov-report/prettify.css b/coverage/lcov-report/prettify.css deleted file mode 100644 index b317a7c..0000000 --- a/coverage/lcov-report/prettify.css +++ /dev/null @@ -1 +0,0 @@ -.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} diff --git a/coverage/lcov-report/prettify.js b/coverage/lcov-report/prettify.js deleted file mode 100644 index ef51e03..0000000 --- a/coverage/lcov-report/prettify.js +++ /dev/null @@ -1 +0,0 @@ -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;V122)){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;arat[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=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=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=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=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*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\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=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]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\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"]); diff --git a/coverage/lcov-report/sort-arrow-sprite.png b/coverage/lcov-report/sort-arrow-sprite.png deleted file mode 100644 index 03f704a609c6fd0dbfdac63466a7d7c958b5cbf3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^>_9Bd!3HEZxJ@+%Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>Jii$m5978H@?Fn+^JD|Y9yzj{W`447Gxa{7*dM7nnnD-Lb z6^}Hx2)'; - } - } - 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); diff --git a/coverage/lcov.info b/coverage/lcov.info deleted file mode 100644 index bcbf6ee..0000000 --- a/coverage/lcov.info +++ /dev/null @@ -1,356 +0,0 @@ -TN: -SF:/Users/agiammarchi/git/domdiff/cjs/index.js -FNF:0 -FNH:0 -DA:4,1 -DA:8,1 -DA:17,132 -DA:18,65 -DA:20,132 -DA:21,132 -DA:22,132 -DA:24,132 -DA:25,132 -DA:26,132 -DA:28,132 -DA:29,132 -DA:32,132 -DA:37,124 -DA:38,124 -DA:42,132 -DA:47,79 -DA:48,79 -DA:51,132 -DA:52,132 -DA:55,132 -DA:56,6 -DA:59,126 -DA:60,31 -DA:68,31 -DA:72,95 -DA:73,22 -DA:80,22 -DA:83,73 -DA:84,73 -DA:85,73 -DA:88,73 -DA:89,23 -DA:99,23 -DA:100,5 -DA:108,5 -DA:116,5 -DA:120,50 -DA:121,18 -DA:131,18 -DA:132,4 -DA:139,4 -DA:146,4 -DA:153,64 -DA:154,6 -DA:162,6 -DA:169,6 -DA:180,58 -DA:191,7 -DA:199,7 -DA:203,51 -DA:219,51 -DA:222,1 -LF:53 -LH:53 -BRDA:17,1,0,65 -BRDA:17,1,1,67 -BRDA:20,2,0,132 -BRDA:20,2,1,131 -BRDA:21,3,0,132 -BRDA:21,3,1,130 -BRDA:22,4,0,67 -BRDA:22,4,1,65 -BRDA:33,5,0,256 -BRDA:33,5,1,231 -BRDA:33,5,2,221 -BRDA:43,6,0,211 -BRDA:43,6,1,174 -BRDA:43,6,2,152 -BRDA:55,7,0,6 -BRDA:55,7,1,126 -BRDA:55,8,0,132 -BRDA:55,8,1,37 -BRDA:59,9,0,31 -BRDA:59,9,1,95 -BRDA:59,10,0,126 -BRDA:59,10,1,31 -BRDA:72,11,0,22 -BRDA:72,11,1,73 -BRDA:72,12,0,95 -BRDA:72,12,1,22 -BRDA:88,13,0,23 -BRDA:88,13,1,50 -BRDA:99,14,0,5 -BRDA:99,14,1,18 -BRDA:120,15,0,18 -BRDA:120,15,1,32 -BRDA:131,16,0,4 -BRDA:131,16,1,14 -BRDA:153,17,0,6 -BRDA:153,17,1,58 -BRDA:153,18,0,64 -BRDA:153,18,1,60 -BRDA:180,19,0,7 -BRDA:180,19,1,51 -BRDA:181,20,0,58 -BRDA:181,20,1,30 -BRF:42 -BRH:42 -end_of_record -TN: -SF:/Users/agiammarchi/git/domdiff/cjs/utils.js -FN:103,(anonymous_1) -FNF:1 -FNH:1 -FNDA:0,(anonymous_1) -DA:2,1 -DA:3,2112 -DA:4,2077 -DA:6,35 -DA:7,35 -DA:8,1119 -DA:9,35 -DA:12,1 -DA:14,4985 -DA:15,1 -DA:17,4353 -DA:18,1 -DA:20,1 -DA:29,41 -DA:31,41 -DA:32,1 -DA:33,41 -DA:34,1093 -DA:35,1093 -DA:36,1093 -DA:41,45 -DA:42,45 -DA:44,1093 -DA:45,9 -DA:46,1084 -DA:48,32 -DA:50,1 -DA:52,1 -DA:60,30 -DA:66,1052 -DA:67,1052 -DA:69,30 -DA:71,1 -DA:73,43 -DA:78,1 -DA:80,1 -DA:81,87 -DA:82,67 -DA:84,20 -DA:85,20 -DA:86,20 -DA:87,20 -DA:90,1 -DA:96,1 -DA:97,1 -DA:98,1 -DA:99,1 -DA:102,1 -DA:104,1 -DA:105,1 -DA:106,1 -DA:107,1 -DA:109,1 -DA:110,1 -DA:117,1 -DA:128,2 -DA:130,2 -DA:131,2 -DA:132,2 -DA:133,2 -DA:135,2 -DA:136,1006 -DA:138,2 -DA:139,2 -DA:140,1006 -DA:142,2 -DA:143,2000 -DA:144,2000 -DA:145,1000 -DA:147,1000 -DA:148,1000 -DA:149,1000 -DA:158,2 -DA:159,2 -DA:160,952 -DA:162,2 -DA:163,2 -DA:164,2 -DA:165,2 -DA:166,2 -DA:167,54 -DA:168,54 -DA:169,863 -DA:170,863 -DA:172,54 -DA:173,945 -DA:174,945 -DA:176,54 -DA:177,54 -DA:178,54 -DA:179,54 -DA:181,2 -DA:182,1083 -DA:183,1083 -DA:185,2 -DA:186,7 -DA:187,7 -DA:189,2 -DA:194,1 -DA:203,51 -DA:204,51 -DA:205,51 -DA:206,51 -DA:208,372 -DA:209,2 -DA:210,370 -DA:212,370 -DA:213,370 -DA:214,370 -DA:215,3548 -DA:216,3237 -DA:218,311 -DA:220,3548 -DA:221,3548 -DA:229,153 -DA:230,153 -DA:232,3548 -DA:233,49 -DA:235,3499 -DA:239,49 -DA:240,49 -DA:241,49 -DA:242,268 -DA:251,93 -DA:252,93 -DA:253,93 -DA:255,268 -DA:256,49 -DA:257,219 -DA:259,219 -DA:260,219 -DA:261,219 -DA:263,112 -DA:264,112 -DA:267,107 -DA:268,107 -DA:271,49 -DA:274,1 -DA:285,51 -DA:286,51 -DA:287,51 -DA:288,51 -DA:289,51 -DA:290,3264 -DA:292,147 -DA:293,147 -DA:294,147 -DA:297,2058 -DA:298,2058 -DA:308,2058 -DA:310,1059 -DA:311,1059 -DA:314,51 -DA:315,51 -DA:316,3264 -DA:318,147 -DA:319,147 -DA:322,1059 -DA:323,1008 -DA:325,51 -DA:332,1059 -DA:337,1 -DA:338,1000 -DA:339,1000 -DA:340,1000 -DA:341,10000 -DA:342,10000 -DA:343,7345 -DA:345,2655 -DA:347,1000 -DA:350,1 -DA:365,51 -DA:395,1 -LF:173 -LH:173 -BRDA:3,1,0,2077 -BRDA:3,1,1,35 -BRDA:31,2,0,0 -BRDA:31,2,1,41 -BRDA:37,3,0,1138 -BRDA:37,3,1,1138 -BRDA:37,3,2,1129 -BRDA:44,4,0,9 -BRDA:44,4,1,1084 -BRDA:61,5,0,1082 -BRDA:61,5,1,1075 -BRDA:73,6,0,13 -BRDA:73,6,1,30 -BRDA:75,7,0,19 -BRDA:75,7,1,11 -BRDA:81,8,0,67 -BRDA:81,8,1,20 -BRDA:102,9,0,0 -BRDA:102,9,1,1 -BRDA:110,10,0,0 -BRDA:110,10,1,0 -BRDA:130,11,0,0 -BRDA:130,11,1,2 -BRDA:144,12,0,1000 -BRDA:144,12,1,1000 -BRDA:147,13,0,1000 -BRDA:147,13,1,0 -BRDA:208,14,0,2 -BRDA:208,14,1,370 -BRDA:212,15,0,319 -BRDA:212,15,1,51 -BRDA:215,16,0,3237 -BRDA:215,16,1,311 -BRDA:215,17,0,3548 -BRDA:215,17,1,3178 -BRDA:215,17,2,2908 -BRDA:222,18,0,3701 -BRDA:222,18,1,2452 -BRDA:222,18,2,2189 -BRDA:232,19,0,49 -BRDA:232,19,1,3499 -BRDA:232,20,0,3548 -BRDA:232,20,1,192 -BRDA:243,21,0,361 -BRDA:243,21,1,300 -BRDA:243,21,2,231 -BRDA:255,22,0,49 -BRDA:255,22,1,219 -BRDA:259,23,0,219 -BRDA:259,23,1,0 -BRDA:261,24,0,112 -BRDA:261,24,1,107 -BRDA:261,25,0,219 -BRDA:261,25,1,207 -BRDA:261,25,2,125 -BRDA:290,26,0,147 -BRDA:290,26,1,2058 -BRDA:290,26,2,1059 -BRDA:304,27,0,950 -BRDA:304,27,1,1108 -BRDA:316,28,0,147 -BRDA:316,28,1,1059 -BRDA:322,29,0,1008 -BRDA:322,29,1,51 -BRDA:342,30,0,7345 -BRDA:342,30,1,2655 -BRDA:366,31,0,51 -BRDA:366,31,1,2 -BRF:68 -BRH:68 -end_of_record diff --git a/esm/utils.js b/esm/utils.js index da00772..b38729d 100644 --- a/esm/utils.js +++ b/esm/utils.js @@ -95,11 +95,11 @@ const Rel = typeof Map === 'undefined' ? function () { const k = [], v = []; return { - has: value => -1 < k.indexOf(value), - get: value => v[k.indexOf(value)], - set: value => { - const i = k.indexOf(value); - v[i < 0 ? (k.push(value) - 1) : i] = value; + has: key => -1 < k.indexOf(key), + get: key => v[k.indexOf(key)], + set: (key, value) => { + const i = k.indexOf(key); + v[i < 0 ? (k.push(key) - 1) : i] = value; } }; } : diff --git a/index.js b/index.js index 2546894..71a3e1a 100644 --- a/index.js +++ b/index.js @@ -70,15 +70,15 @@ var Rel = typeof Map === 'undefined' ? function () { var k = [], v = []; return { - has: function has(value) { - return -1 < k.indexOf(value); + has: function has(key) { + return -1 < k.indexOf(key); }, - get: function get(value) { - return v[k.indexOf(value)]; + get: function get(key) { + return v[k.indexOf(key)]; }, - set: function set(value) { - var i = k.indexOf(value); - v[i < 0 ? k.push(value) - 1 : i] = value; + set: function set(key, value) { + var i = k.indexOf(key); + v[i < 0 ? k.push(key) - 1 : i] = value; } }; } : Map; diff --git a/min.js b/min.js index a401580..248fd04 100644 --- a/min.js +++ b/min.js @@ -1 +1 @@ -var domdiff=function(){"use strict";var r=function(r,e,n,t,f,o){if(f-t<2)e.insertBefore(r(n[t],1),o);else{for(var i=e.ownerDocument.createDocumentFragment();t=u;){for(var a=e,v=f;ai;)--v;c=a+t-v;var m=Array(c),k=d[v];for(--n;k;){for(var y=k,A=y.newi,x=y.oldi;n>A;)m[--c]=1,--n;for(;i>x;)m[--c]=-1,--i;m[--c]=0,--n,--i,k=k.prev}for(;n>=e;)m[--c]=1,--n;for(;i>=o;)m[--c]=-1,--i;return m},v=function(r,e,n,t,f,o,i){var u=n+o,a=[],v=void 0,c=void 0,s=void 0,d=void 0,l=void 0,h=void 0,g=void 0;r:for(v=0;v<=u;v++){if(v>50)return null;for(g=v-1,l=v?a[v-1]:[0,0],h=a[v]=[],c=-v;c<=v;c+=2){for(d=c===-v||c!==v&&l[g+c-1]=0;v--){for(;d>0&&s>0&&i(t[f+d-1],r[e+s-1]);)p[b--]=0,d--,s--;if(!v)break;g=v-1,l=v?a[v-1]:[0,0],c=d-s,c===-v||c!==v&&l[g+c-1]>>0;n=u;){for(var a=e,v=f;ai;)--v;c=a+t-v;var m=Array(c),k=d[v];for(--n;k;){for(var y=k,A=y.newi,x=y.oldi;n>A;)m[--c]=1,--n;for(;i>x;)m[--c]=-1,--i;m[--c]=0,--n,--i,k=k.prev}for(;n>=e;)m[--c]=1,--n;for(;i>=o;)m[--c]=-1,--i;return m},v=function(r,e,n,t,f,o,i){var u=n+o,a=[],v=void 0,c=void 0,s=void 0,d=void 0,l=void 0,h=void 0,g=void 0;r:for(v=0;v<=u;v++){if(v>50)return null;for(g=v-1,l=v?a[v-1]:[0,0],h=a[v]=[],c=-v;c<=v;c+=2){for(d=c===-v||c!==v&&l[g+c-1]=0;v--){for(;d>0&&s>0&&i(t[f+d-1],r[e+s-1]);)p[b--]=0,d--,s--;if(!v)break;g=v-1,l=v?a[v-1]:[0,0],c=d-s,c===-v||c!==v&&l[g+c-1]>>0;n Date: Thu, 22 Nov 2018 08:40:05 +0100 Subject: [PATCH 44/71] removed coverage from the repo --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 58b805f..2f9bd06 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .DS_Store -node_modules/ \ No newline at end of file +node_modules/ +coverage/ \ No newline at end of file From 08fc7fa2ea4268719272a2f3fb5c721e4c542272 Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Thu, 22 Nov 2018 08:40:17 +0100 Subject: [PATCH 45/71] 1.0.2 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0ab404b..39321e3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "domdiff", - "version": "1.0.1", + "version": "1.0.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 0967cfc..4108ba3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "domdiff", - "version": "1.0.1", + "version": "1.0.2", "description": "A fast and simple way to diff childNodes", "unpkg": "min.js", "main": "cjs/index.js", From 6c1003c4ea768c3ae369b442f7859e4a83f76544 Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Thu, 22 Nov 2018 08:46:48 +0100 Subject: [PATCH 46/71] publishing v2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4108ba3..1af4426 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "domdiff", - "version": "1.0.2", + "version": "2.0.0", "description": "A fast and simple way to diff childNodes", "unpkg": "min.js", "main": "cjs/index.js", From f9e767a7e3cfbdd4adcd0114fd477e0bf2bff44f Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Thu, 22 Nov 2018 08:46:51 +0100 Subject: [PATCH 47/71] 2.0.1 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 39321e3..447477b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "domdiff", - "version": "1.0.2", + "version": "2.0.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 1af4426..6137469 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "domdiff", - "version": "2.0.0", + "version": "2.0.1", "description": "A fast and simple way to diff childNodes", "unpkg": "min.js", "main": "cjs/index.js", From 5783a192cc48afed2c13c94184ffc5c1639500cf Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Thu, 22 Nov 2018 18:43:05 +0100 Subject: [PATCH 48/71] Refactoring out most common dependencies --- cjs/utils.js | 22 ++++-------------- esm/utils.js | 22 ++++-------------- index.js | 59 +++++++++++++++++++++++++++++++---------------- min.js | 3 ++- package-lock.json | 28 ++++++++++++++++++++++ package.json | 7 ++++-- rollup.config.js | 6 +++++ 7 files changed, 88 insertions(+), 59 deletions(-) diff --git a/cjs/utils.js b/cjs/utils.js index e639e4c..487f8b6 100644 --- a/cjs/utils.js +++ b/cjs/utils.js @@ -1,4 +1,6 @@ 'use strict'; +const Map = (require('@ungap/essential-map')); + const append = (get, parent, children, start, end, before) => { if ((end - start) < 2) parent.insertBefore(get(children[start], 1), before); @@ -98,22 +100,6 @@ const INSERTION = 1; const SKIP = 0; const SKIP_OND = 50; -/* istanbul ignore next */ -const Rel = typeof Map === 'undefined' ? - function () { - const k = [], v = []; - return { - has: key => -1 < k.indexOf(key), - get: key => v[k.indexOf(key)], - set: (key, value) => { - const i = k.indexOf(key); - v[i < 0 ? (k.push(key) - 1) : i] = value; - } - }; - } : - Map -; - const HS = ( futureNodes, futureStart, @@ -135,7 +121,7 @@ const HS = ( for (let i = 1; i < minLen; i++) tresh[i] = currentEnd; - const keymap = new Rel; + const keymap = new Map; for (let i = currentStart; i < currentEnd; i++) keymap.set(currentNodes[i], i); @@ -282,7 +268,7 @@ const applyDiff = ( currentLength, before ) => { - const live = new Rel; + const live = new Map; const length = diff.length; let currentIndex = currentStart; let i = 0; diff --git a/esm/utils.js b/esm/utils.js index b38729d..e720627 100644 --- a/esm/utils.js +++ b/esm/utils.js @@ -1,3 +1,5 @@ +import Map from '@ungap/essential-map'; + export const append = (get, parent, children, start, end, before) => { if ((end - start) < 2) parent.insertBefore(get(children[start], 1), before); @@ -90,22 +92,6 @@ const INSERTION = 1; const SKIP = 0; const SKIP_OND = 50; -/* istanbul ignore next */ -const Rel = typeof Map === 'undefined' ? - function () { - const k = [], v = []; - return { - has: key => -1 < k.indexOf(key), - get: key => v[k.indexOf(key)], - set: (key, value) => { - const i = k.indexOf(key); - v[i < 0 ? (k.push(key) - 1) : i] = value; - } - }; - } : - Map -; - const HS = ( futureNodes, futureStart, @@ -127,7 +113,7 @@ const HS = ( for (let i = 1; i < minLen; i++) tresh[i] = currentEnd; - const keymap = new Rel; + const keymap = new Map; for (let i = currentStart; i < currentEnd; i++) keymap.set(currentNodes[i], i); @@ -274,7 +260,7 @@ const applyDiff = ( currentLength, before ) => { - const live = new Rel; + const live = new Map; const length = diff.length; let currentIndex = currentStart; let i = 0; diff --git a/index.js b/index.js index 71a3e1a..3982df7 100644 --- a/index.js +++ b/index.js @@ -1,6 +1,43 @@ var domdiff = (function () { 'use strict'; +/*! (c) Andrea Giammarchi - ISC */ +var window = null || /* istanbul ignore next */{}; +try { + window.Map = Map; +} catch (Map) { + window.Map = function Map() { + var i = 0; + var k = []; + var v = []; + return { + delete: function _delete(key) { + var had = contains(key); + if (had) { + k.splice(i, 1); + v.splice(i, 1); + } + return had; + }, + get: function get(key) { + return contains(key) ? v[i] : void 0; + }, + has: function has(key) { + return contains(key); + }, + set: function set(key, value) { + v[contains(key) ? i : k.push(key) - 1] = value; + return this; + } + }; + function contains(v) { + i = k.indexOf(v); + return -1 < i; + } + }; +} +var Map$1 = window.Map; + var append = function append(get, parent, children, start, end, before) { if (end - start < 2) parent.insertBefore(get(children[start], 1), before);else { var fragment = parent.ownerDocument.createDocumentFragment(); @@ -65,24 +102,6 @@ var INSERTION = 1; var SKIP = 0; var SKIP_OND = 50; -/* istanbul ignore next */ -var Rel = typeof Map === 'undefined' ? function () { - var k = [], - v = []; - return { - has: function has(key) { - return -1 < k.indexOf(key); - }, - get: function get(key) { - return v[k.indexOf(key)]; - }, - set: function set(key, value) { - var i = k.indexOf(key); - v[i < 0 ? k.push(key) - 1 : i] = value; - } - }; -} : Map; - var HS = function HS(futureNodes, futureStart, futureEnd, futureChanges, currentNodes, currentStart, currentEnd, currentChanges) { var k = 0; @@ -94,7 +113,7 @@ var HS = function HS(futureNodes, futureStart, futureEnd, futureChanges, current for (var i = 1; i < minLen; i++) { tresh[i] = currentEnd; - }var keymap = new Rel(); + }var keymap = new Map$1(); for (var _i = currentStart; _i < currentEnd; _i++) { keymap.set(currentNodes[_i], _i); }for (var _i2 = futureStart; _i2 < futureEnd; _i2++) { @@ -215,7 +234,7 @@ var OND = function OND(futureNodes, futureStart, rows, currentNodes, currentStar }; var applyDiff = function applyDiff(diff, get, parentNode, futureNodes, futureStart, currentNodes, currentStart, currentLength, before) { - var live = new Rel(); + var live = new Map$1(); var length = diff.length; var currentIndex = currentStart; var i = 0; diff --git a/min.js b/min.js index 248fd04..3e4aef4 100644 --- a/min.js +++ b/min.js @@ -1 +1,2 @@ -var domdiff=function(){"use strict";var r=function(r,e,n,t,f,o){if(f-t<2)e.insertBefore(r(n[t],1),o);else{for(var i=e.ownerDocument.createDocumentFragment();t=u;){for(var a=e,v=f;ai;)--v;c=a+t-v;var m=Array(c),k=d[v];for(--n;k;){for(var y=k,A=y.newi,x=y.oldi;n>A;)m[--c]=1,--n;for(;i>x;)m[--c]=-1,--i;m[--c]=0,--n,--i,k=k.prev}for(;n>=e;)m[--c]=1,--n;for(;i>=o;)m[--c]=-1,--i;return m},v=function(r,e,n,t,f,o,i){var u=n+o,a=[],v=void 0,c=void 0,s=void 0,d=void 0,l=void 0,h=void 0,g=void 0;r:for(v=0;v<=u;v++){if(v>50)return null;for(g=v-1,l=v?a[v-1]:[0,0],h=a[v]=[],c=-v;c<=v;c+=2){for(d=c===-v||c!==v&&l[g+c-1]=0;v--){for(;d>0&&s>0&&i(t[f+d-1],r[e+s-1]);)p[b--]=0,d--,s--;if(!v)break;g=v-1,l=v?a[v-1]:[0,0],c=d-s,c===-v||c!==v&&l[g+c-1]>>0;n=a;){for(var u=e,c=o;ua;)--c;v=u+o-c;var m=Array(v),k=s[c];for(--t;k;){for(var y=k,A=y.newi,M=y.oldi;t>A;)m[--v]=1,--t;for(;a>M;)m[--v]=-1,--a;m[--v]=0,--t,--a,k=k.prev}for(;t>=n;)m[--v]=1,--t;for(;a>=i;)m[--v]=-1,--a;return m},v=function(r,e,n,t,o,f,i){var a=n+f,u=[],c=void 0,v=void 0,s=void 0,l=void 0,d=void 0,h=void 0,p=void 0;r:for(c=0;c<=a;c++){if(c>50)return null;for(p=c-1,d=c?u[c-1]:[0,0],h=u[c]=[],v=-c;v<=c;v+=2){for(l=v===-c||v!==c&&d[p+v-1]=0;c--){for(;l>0&&s>0&&i(t[o+l-1],r[e+s-1]);)g[b--]=0,l--,s--;if(!c)break;p=c-1,d=c?u[c-1]:[0,0],v=l-s,v===-c||v!==c&&d[p+v-1]>>0;n index.js", - "cjs": "ascjs ./esm ./cjs", + "cjs": "ascjs ./esm ./cjs && sed -i.bck 's/(m => m.__esModule ? m.default : m)//' cjs/utils.js && rm cjs/utils.js.bck", "coveralls": "cat ./coverage/lcov.info | coveralls", "min": "uglifyjs index.js --support-ie8 --comments=/^!/ -cmo min.js", "size": "echo \"gzip: $(cat min.js | gzip -c9 | wc -c)\" && echo \"brotli: $(cat min.js | brotli | wc -c)\" && echo ''", @@ -41,13 +41,16 @@ "istanbul": "^0.4.5", "rollup": "^0.52.0", "rollup-plugin-babel": "^3.0.7", + "rollup-plugin-node-resolve": "^3.4.0", "tressa": "^0.3.1", "uglify-js": "^2.8.29" }, "directories": { "test": "test" }, - "dependencies": {}, + "dependencies": { + "@ungap/essential-map": "^0.1.5" + }, "repository": { "type": "git", "url": "git+https://github.com/WebReflection/domdiff.git" diff --git a/rollup.config.js b/rollup.config.js index 5de2f84..1b048e2 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,12 +1,18 @@ import babel from 'rollup-plugin-babel'; +import resolve from 'rollup-plugin-node-resolve'; export default { input: 'esm/index.js', plugins: [ + resolve({ + module: true + }), babel({ plugins: require('./babel-plugins.json') }) ], + context: 'null', + moduleContext: 'null', output: { exports: 'named', file: 'index.js', From 51e85a59aa64c63c18a8789fe46a1bdc7f644571 Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Fri, 23 Nov 2018 13:47:06 +0100 Subject: [PATCH 49/71] using ungap --- .gitignore | 3 +- index.js | 8 +- package-lock.json | 2728 --------------------------------------------- package.json | 2 +- 4 files changed, 7 insertions(+), 2734 deletions(-) delete mode 100644 package-lock.json diff --git a/.gitignore b/.gitignore index 2f9bd06..475f26d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .DS_Store node_modules/ -coverage/ \ No newline at end of file +coverage/ +package-lock.json diff --git a/index.js b/index.js index 3982df7..f859604 100644 --- a/index.js +++ b/index.js @@ -2,11 +2,11 @@ var domdiff = (function () { 'use strict'; /*! (c) Andrea Giammarchi - ISC */ -var window = null || /* istanbul ignore next */{}; +var self = null || /* istanbul ignore next */{}; try { - window.Map = Map; + self.Map = Map; } catch (Map) { - window.Map = function Map() { + self.Map = function Map() { var i = 0; var k = []; var v = []; @@ -36,7 +36,7 @@ try { } }; } -var Map$1 = window.Map; +var Map$1 = self.Map; var append = function append(get, parent, children, start, end, before) { if (end - start < 2) parent.insertBefore(get(children[start], 1), before);else { diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 8fd64a6..0000000 --- a/package-lock.json +++ /dev/null @@ -1,2728 +0,0 @@ -{ - "name": "domdiff", - "version": "2.0.1", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@ungap/essential-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@ungap/essential-map/-/essential-map-0.1.5.tgz", - "integrity": "sha512-Cllbsq52iX9+16tweeQ1qvpM0QZcirqmnlbL4zZ0tmtXTgUdUUvtREjFzTnXEuatR1A6ONszoeLovuECISBBQg==" - }, - "abbrev": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", - "dev": true - }, - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "dev": true, - "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" - } - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", - "dev": true, - "optional": true, - "requires": { - "micromatch": "^2.1.5", - "normalize-path": "^2.0.0" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "optional": true, - "requires": { - "arr-flatten": "^1.0.1" - } - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, - "optional": true - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true, - "optional": true - }, - "ascjs": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/ascjs/-/ascjs-2.5.1.tgz", - "integrity": "sha512-OceO2r8Hf1fbOhKeOCnQxYzn0C7kLY78yAM72pggWwpa3h/vs+dnkDCoDkf0JzQZJgSDyrW7gcC9BZnhSgTpEg==", - "dev": true, - "requires": { - "babylon": "^6.18.0" - } - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true, - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", - "dev": true - }, - "babel-cli": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.26.0.tgz", - "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=", - "dev": true, - "requires": { - "babel-core": "^6.26.0", - "babel-polyfill": "^6.26.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "chokidar": "^1.6.1", - "commander": "^2.11.0", - "convert-source-map": "^1.5.0", - "fs-readdir-recursive": "^1.0.0", - "glob": "^7.1.2", - "lodash": "^4.17.4", - "output-file-sync": "^1.1.2", - "path-is-absolute": "^1.0.1", - "slash": "^1.0.0", - "source-map": "^0.5.6", - "v8flags": "^2.1.1" - } - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - } - }, - "babel-core": { - "version": "6.26.3", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", - "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", - "dev": true, - "requires": { - "babel-code-frame": "^6.26.0", - "babel-generator": "^6.26.0", - "babel-helpers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "convert-source-map": "^1.5.1", - "debug": "^2.6.9", - "json5": "^0.5.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.4", - "path-is-absolute": "^1.0.1", - "private": "^0.1.8", - "slash": "^1.0.0", - "source-map": "^0.5.7" - } - }, - "babel-generator": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", - "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", - "dev": true, - "requires": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" - } - }, - "babel-helper-define-map": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", - "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", - "dev": true, - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "babel-helper-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", - "dev": true, - "requires": { - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-get-function-arity": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-optimise-call-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", - "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-replace-supers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", - "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", - "dev": true, - "requires": { - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helpers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", - "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-check-es2015-constants": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", - "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-arrow-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", - "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-block-scoped-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", - "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-block-scoping": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", - "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "babel-plugin-transform-es2015-classes": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", - "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", - "dev": true, - "requires": { - "babel-helper-define-map": "^6.24.1", - "babel-helper-function-name": "^6.24.1", - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-helper-replace-supers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-computed-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", - "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-destructuring": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", - "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-duplicate-keys": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", - "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", - "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", - "dev": true, - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", - "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-shorthand-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", - "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-spread": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", - "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-template-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", - "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-polyfill": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", - "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "regenerator-runtime": "^0.10.5" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", - "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", - "dev": true - } - } - }, - "babel-register": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", - "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", - "dev": true, - "requires": { - "babel-core": "^6.26.0", - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "home-or-tmp": "^2.0.0", - "lodash": "^4.17.4", - "mkdirp": "^0.5.1", - "source-map-support": "^0.4.15" - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" - } - }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true, - "requires": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "binary-extensions": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", - "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "optional": true, - "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - } - }, - "builtin-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-2.0.0.tgz", - "integrity": "sha512-3U5kUA5VPsRUA3nofm/BXX7GVHKfxz0hOBAPxXrIvHzlDRkQVqEn6yi8QJegxl4LzOHLdvb7XF5dVawa/VVYBg==", - "dev": true - }, - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "dev": true, - "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" - } - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", - "dev": true, - "optional": true, - "requires": { - "anymatch": "^1.3.0", - "async-each": "^1.0.0", - "fsevents": "^1.0.0", - "glob-parent": "^2.0.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^2.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0" - } - }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" - }, - "dependencies": { - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true - } - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "consolemd": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/consolemd/-/consolemd-0.1.3.tgz", - "integrity": "sha512-UHKTgtvAtikE0UIvqP9Rj0b+rZ5AHIvbfL+GSjYhH2UOJWfnoIJ0+zygI/l/7cOB8p9JrGrIkC1BgQXBNzEQQA==", - "dev": true, - "requires": { - "echomd": "^0.1.2" - } - }, - "convert-source-map": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", - "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", - "dev": true - }, - "core-js": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", - "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "coveralls": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.2.tgz", - "integrity": "sha512-Tv0LKe/MkBOilH2v7WBiTBdudg2ChfGbdXafc/s330djpF3zKOmuehTeRwjXWc7pzfj9FrDUTA7tEx6Div8NFw==", - "dev": true, - "requires": { - "growl": "~> 1.10.0", - "js-yaml": "^3.11.0", - "lcov-parse": "^0.0.10", - "log-driver": "^1.2.7", - "minimist": "^1.2.0", - "request": "^2.85.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true, - "requires": { - "repeating": "^2.0.0" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "optional": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "echomd": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/echomd/-/echomd-0.1.2.tgz", - "integrity": "sha1-kNPPD55Fkwb0wdkKArZelxkj9v8=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "escodegen": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", - "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", - "dev": true, - "requires": { - "esprima": "^2.7.1", - "estraverse": "^1.9.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.2.0" - }, - "dependencies": { - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, - "source-map": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", - "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", - "dev": true, - "optional": true, - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, - "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", - "dev": true - }, - "estraverse": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", - "dev": true - }, - "estree-walker": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.2.1.tgz", - "integrity": "sha1-va/oCVOD2EFNXcLs9MkXO225QS4=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "optional": true, - "requires": { - "is-posix-bracket": "^0.1.0" - } - }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, - "optional": true, - "requires": { - "fill-range": "^2.1.0" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "optional": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true, - "optional": true - }, - "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "dev": true, - "optional": true, - "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true, - "optional": true - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "optional": true, - "requires": { - "for-in": "^1.0.1" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", - "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "1.0.6", - "mime-types": "^2.1.12" - } - }, - "fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", - "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", - "dev": true, - "optional": true, - "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", - "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", - "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true, - "optional": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", - "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==", - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", - "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.21", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.21.tgz", - "integrity": "sha512-En5V9za5mBt2oUA03WGD3TwDv0MKAruqsuxstbMUZaj9W9k/m1CV/9py3l0L5kw9Bln8fdHQmzHSYtvpvTLpKw==", - "dev": true, - "optional": true, - "requires": { - "safer-buffer": "^2.1.0" - } - }, - "ignore-walk": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", - "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "minipass": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.2.4.tgz", - "integrity": "sha512-hzXIWWet/BzWhYs2b+u7dRHlruXhwdgvlTMDKC6Cb1U7ps6Ac6yQlR39xsbjWJE377YTCtKwIXIpJ5oP+j5y8g==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.1", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz", - "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==", - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true, - "optional": true - }, - "needle": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.0.tgz", - "integrity": "sha512-eFagy6c+TYayorXw/qtAdSvaUpEbBsDwDyxYFgLZ0lTojfH7K+OdBqAF7TAFwDokJaGpubpSGG0wO3iC0XPi8w==", - "dev": true, - "optional": true, - "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.0.tgz", - "integrity": "sha512-G7kEonQLRbcA/mOoFoxvlMrw6Q6dPf92+t/l0DFSMuSlDoWaI9JWIyPwK0jyE1bph//CUEL65/Fz1m2vJbmjQQ==", - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.0", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.1.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", - "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.3.tgz", - "integrity": "sha512-ByQ3oJ/5ETLyglU2+8dBObvhfWXX8dtPZDMePCahptliFX2iIuhyEszyFk401PZUNQH20vvdW5MLjJxkwU80Ow==", - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.10.tgz", - "integrity": "sha512-AQC0Dyhzn4EiYEfIUjCdMl0JJ61I2ER9ukf/sLxJUcZHfo+VyEfz2rMJgLZSS1v30OxPQe1cN0LZA1xbcaVfWA==", - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.7.tgz", - "integrity": "sha512-LdLD8xD4zzLsAT5xyushXDNscEjB7+2ulnl8+r1pnESlYtlJtVSoCMBGr30eDRJ3+2Gq89jK9P9e4tCEH1+ywA==", - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.5.1", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, - "optional": true, - "requires": { - "glob": "^7.0.5" - } - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true, - "optional": true - }, - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.1.tgz", - "integrity": "sha512-O+v1r9yN4tOsvl90p5HAP4AEqbYhx4036AGMm075fH9F8Qwi3oJ+v4u50FkT/KkvywNGtwkk0zRI+8eYm1X/xg==", - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.0.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.2.4", - "minizlib": "^1.1.0", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.1", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", - "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "yallist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", - "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=", - "dev": true - } - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "optional": true, - "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - } - }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "requires": { - "is-glob": "^2.0.0" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "handlebars": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", - "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", - "dev": true, - "requires": { - "async": "^1.4.0", - "optimist": "^0.6.1", - "source-map": "^0.4.4", - "uglify-js": "^2.6" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz", - "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==", - "dev": true, - "requires": { - "ajv": "^5.3.0", - "har-schema": "^2.0.0" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "home-or-tmp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.1" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "optional": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true, - "optional": true - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true, - "optional": true, - "requires": { - "is-primitive": "^2.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "optional": true - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", - "dev": true - }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true, - "optional": true - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true, - "optional": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "optional": true, - "requires": { - "isarray": "1.0.0" - } - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "istanbul": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", - "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", - "dev": true, - "requires": { - "abbrev": "1.0.x", - "async": "1.x", - "escodegen": "1.8.x", - "esprima": "2.7.x", - "glob": "^5.0.15", - "handlebars": "^4.0.1", - "js-yaml": "3.x", - "mkdirp": "0.5.x", - "nopt": "3.x", - "once": "1.x", - "resolve": "1.1.x", - "supports-color": "^3.1.0", - "which": "^1.1.1", - "wordwrap": "^1.0.0" - }, - "dependencies": { - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "js-yaml": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", - "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": true - }, - "jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "dev": true - }, - "lcov-parse": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz", - "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lodash": { - "version": "4.17.10", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", - "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", - "dev": true - }, - "log-driver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", - "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", - "dev": true - }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true - }, - "loose-envify": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", - "dev": true, - "requires": { - "js-tokens": "^3.0.0" - } - }, - "math-random": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", - "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", - "dev": true, - "optional": true - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "optional": true, - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - } - }, - "mime-db": { - "version": "1.36.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz", - "integrity": "sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw==", - "dev": true - }, - "mime-types": { - "version": "2.1.20", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz", - "integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==", - "dev": true, - "requires": { - "mime-db": "~1.36.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "nan": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", - "dev": true, - "optional": true - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true, - "optional": true, - "requires": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - }, - "dependencies": { - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true - } - } - }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "output-file-sync": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", - "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.4", - "mkdirp": "^0.5.1", - "object-assign": "^4.1.0" - } - }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, - "optional": true, - "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true, - "optional": true - }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true, - "optional": true - }, - "psl": { - "version": "1.1.29", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", - "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==", - "dev": true - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "randomatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz", - "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==", - "dev": true, - "optional": true, - "requires": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true, - "optional": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdirp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", - "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", - "dev": true, - "optional": true, - "requires": { - "graceful-fs": "^4.1.2", - "minimatch": "^3.0.2", - "readable-stream": "^2.0.2", - "set-immediate-shim": "^1.0.1" - } - }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "dev": true, - "optional": true, - "requires": { - "is-equal-shallow": "^0.1.3" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "dev": true, - "requires": { - "align-text": "^0.1.1" - } - }, - "rollup": { - "version": "0.52.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.52.3.tgz", - "integrity": "sha512-cw+vb9NqaTXlwJyb8G+Ve+uhhlVTcl1NKBkfANdeQqVcpZFilQgeNnAnNiu7MwfeXrqiKEGz+3R03a3zeFkmEQ==", - "dev": true - }, - "rollup-plugin-babel": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-3.0.7.tgz", - "integrity": "sha512-bVe2y0z/V5Ax1qU8NX/0idmzIwJPdUGu8Xx3vXH73h0yGjxfv2gkFI82MBVg49SlsFlLTBadBHb67zy4TWM3hA==", - "dev": true, - "requires": { - "rollup-pluginutils": "^1.5.0" - } - }, - "rollup-plugin-node-resolve": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.4.0.tgz", - "integrity": "sha512-PJcd85dxfSBWih84ozRtBkB731OjXk0KnzN0oGp7WOWcarAFkVa71cV5hTJg2qpVsV2U8EUwrzHP3tvy9vS3qg==", - "dev": true, - "requires": { - "builtin-modules": "^2.0.0", - "is-module": "^1.0.0", - "resolve": "^1.1.6" - } - }, - "rollup-pluginutils": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz", - "integrity": "sha1-HhVud4+UtyVb+hs9AXi+j1xVJAg=", - "dev": true, - "requires": { - "estree-walker": "^0.2.1", - "minimatch": "^3.0.2" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", - "dev": true, - "optional": true - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "dev": true, - "requires": { - "source-map": "^0.5.6" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", - "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "dev": true, - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - } - }, - "tressa": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/tressa/-/tressa-0.3.1.tgz", - "integrity": "sha1-OhdV5a7cQ0+tmntp0EGrztdJatI=", - "dev": true, - "requires": { - "consolemd": "^0.1.2" - } - }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, - "optional": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "dev": true, - "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" - } - }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "dev": true, - "optional": true - }, - "user-home": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", - "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true, - "optional": true - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true - }, - "v8flags": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", - "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", - "dev": true, - "requires": { - "user-home": "^1.1.1" - } - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "dev": true - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" - } - } - } -} diff --git a/package.json b/package.json index 9ba9c4e..8e4d3c5 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "test": "test" }, "dependencies": { - "@ungap/essential-map": "^0.1.5" + "@ungap/essential-map": "^0.1.7" }, "repository": { "type": "git", From 6dd5d5b294ea5af2f8a4d598ec8613aeb1607908 Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Fri, 23 Nov 2018 13:47:09 +0100 Subject: [PATCH 50/71] 2.0.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8e4d3c5..ae7c3ba 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "domdiff", - "version": "2.0.1", + "version": "2.0.2", "description": "A fast and simple way to diff childNodes", "unpkg": "min.js", "main": "cjs/index.js", From 580d3f4a301bf38a552dea60ca3795b91cc6406f Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Thu, 17 Jan 2019 08:22:59 +0100 Subject: [PATCH 51/71] Fix #13 - Do not remove wires when these are used to prepend --- cjs/utils.js | 2 +- esm/utils.js | 2 +- index.js | 2 +- min.js | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cjs/utils.js b/cjs/utils.js index 487f8b6..c4f7f11 100644 --- a/cjs/utils.js +++ b/cjs/utils.js @@ -288,7 +288,7 @@ const applyDiff = ( futureStart++, futureStart, currentIndex < currentLength ? - get(currentNodes[currentIndex], 1) : + get(currentNodes[currentIndex], 0) : before ); break; diff --git a/esm/utils.js b/esm/utils.js index e720627..9d3c115 100644 --- a/esm/utils.js +++ b/esm/utils.js @@ -280,7 +280,7 @@ const applyDiff = ( futureStart++, futureStart, currentIndex < currentLength ? - get(currentNodes[currentIndex], 1) : + get(currentNodes[currentIndex], 0) : before ); break; diff --git a/index.js b/index.js index f859604..86287bf 100644 --- a/index.js +++ b/index.js @@ -247,7 +247,7 @@ var applyDiff = function applyDiff(diff, get, parentNode, futureNodes, futureSta case INSERTION: // TODO: bulk appends for sequential nodes live.set(futureNodes[futureStart], 1); - append(get, parentNode, futureNodes, futureStart++, futureStart, currentIndex < currentLength ? get(currentNodes[currentIndex], 1) : before); + append(get, parentNode, futureNodes, futureStart++, futureStart, currentIndex < currentLength ? get(currentNodes[currentIndex], 0) : before); break; case DELETION: currentIndex++; diff --git a/min.js b/min.js index 3e4aef4..1ca9f32 100644 --- a/min.js +++ b/min.js @@ -1,2 +1,2 @@ var domdiff=function(){"use strict";/*! (c) Andrea Giammarchi - ISC */ -var r={};try{r.Map=Map}catch(Map){r.Map=function(){function r(r){return-1<(e=n.indexOf(r))}var e=0,n=[],t=[];return{"delete":function(o){var f=r(o);return f&&(n.splice(e,1),t.splice(e,1)),f},get:function(n){return r(n)?t[e]:void 0},has:function(e){return r(e)},set:function(o,f){return t[r(o)?e:n.push(o)-1]=f,this}}}}var e=r.Map,n=function(r,e,n,t,o,f){if(o-t<2)e.insertBefore(r(n[t],1),f);else{for(var i=e.ownerDocument.createDocumentFragment();t=a;){for(var u=e,c=o;ua;)--c;v=u+o-c;var m=Array(v),k=s[c];for(--t;k;){for(var y=k,A=y.newi,M=y.oldi;t>A;)m[--v]=1,--t;for(;a>M;)m[--v]=-1,--a;m[--v]=0,--t,--a,k=k.prev}for(;t>=n;)m[--v]=1,--t;for(;a>=i;)m[--v]=-1,--a;return m},v=function(r,e,n,t,o,f,i){var a=n+f,u=[],c=void 0,v=void 0,s=void 0,l=void 0,d=void 0,h=void 0,p=void 0;r:for(c=0;c<=a;c++){if(c>50)return null;for(p=c-1,d=c?u[c-1]:[0,0],h=u[c]=[],v=-c;v<=c;v+=2){for(l=v===-c||v!==c&&d[p+v-1]=0;c--){for(;l>0&&s>0&&i(t[o+l-1],r[e+s-1]);)g[b--]=0,l--,s--;if(!c)break;p=c-1,d=c?u[c-1]:[0,0],v=l-s,v===-c||v!==c&&d[p+v-1]>>0;n=a;){for(var u=e,c=o;ua;)--c;v=u+o-c;var m=Array(v),k=s[c];for(--t;k;){for(var y=k,A=y.newi,M=y.oldi;t>A;)m[--v]=1,--t;for(;a>M;)m[--v]=-1,--a;m[--v]=0,--t,--a,k=k.prev}for(;t>=n;)m[--v]=1,--t;for(;a>=i;)m[--v]=-1,--a;return m},v=function(r,e,n,t,o,f,i){var a=n+f,u=[],c=void 0,v=void 0,s=void 0,l=void 0,d=void 0,h=void 0,p=void 0;r:for(c=0;c<=a;c++){if(c>50)return null;for(p=c-1,d=c?u[c-1]:[0,0],h=u[c]=[],v=-c;v<=c;v+=2){for(l=v===-c||v!==c&&d[p+v-1]=0;c--){for(;l>0&&s>0&&i(t[o+l-1],r[e+s-1]);)g[b--]=0,l--,s--;if(!c)break;p=c-1,d=c?u[c-1]:[0,0],v=l-s,v===-c||v!==c&&d[p+v-1]>>0;n Date: Thu, 17 Jan 2019 08:28:49 +0100 Subject: [PATCH 52/71] 2.0.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 96713b5..d609a73 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "domdiff", - "version": "2.0.2", + "version": "2.0.3", "description": "A fast and simple way to diff childNodes", "unpkg": "min.js", "main": "cjs/index.js", From 25e5207c4c0c643581d748c1e4a5c0351d858e03 Mon Sep 17 00:00:00 2001 From: Andrea Giammarchi Date: Wed, 3 Jul 2019 17:01:59 +0200 Subject: [PATCH 53/71] Fix issue with