@mmckegg/mutant
Advanced tools
Comparing version 3.11.0 to 3.11.1
45
array.js
@@ -14,5 +14,6 @@ var Value = require('./value') | ||
var sources = [] | ||
var releases = [] | ||
var objectReleases = [] | ||
var fixedIndexing = opts && opts.fixedIndexing || false | ||
var releases = [] | ||
var comparer = opts && opts.comparer || null | ||
@@ -59,4 +60,4 @@ | ||
if (binder.live) { | ||
tryInvoke(releases[index]) | ||
releases[index] = bind(valueOrObs) | ||
tryInvoke(objectReleases[index]) | ||
objectReleases[index] = bind(valueOrObs) | ||
} | ||
@@ -70,3 +71,3 @@ binder.broadcast() | ||
sources.splice(at, 0, valueOrObs) | ||
if (binder.live) releases.splice(at, 0, bind(valueOrObs)) | ||
if (binder.live) objectReleases.splice(at, 0, bind(valueOrObs)) | ||
object.splice(at, 0, resolve(valueOrObs)) | ||
@@ -79,3 +80,3 @@ binder.broadcast() | ||
var result = sources.pop() | ||
if (binder.live) tryInvoke(releases.pop()) | ||
if (binder.live) tryInvoke(objectReleases.pop()) | ||
object.pop() | ||
@@ -88,3 +89,3 @@ binder.broadcast() | ||
var result = sources.shift() | ||
if (binder.live) tryInvoke(releases.shift()) | ||
if (binder.live) tryInvoke(objectReleases.shift()) | ||
object.shift() | ||
@@ -96,5 +97,5 @@ binder.broadcast() | ||
observable.clear = function () { | ||
releases.forEach(tryInvoke) | ||
objectReleases.forEach(tryInvoke) | ||
sources.length = 0 | ||
releases.length = 0 | ||
objectReleases.length = 0 | ||
object.length = 0 | ||
@@ -111,3 +112,3 @@ binder.broadcast() | ||
sources.splice(index, 1) | ||
if (binder.live) releases.splice(index, 1).forEach(tryInvoke) | ||
if (binder.live) objectReleases.splice(index, 1).forEach(tryInvoke) | ||
object.splice(index, 1) | ||
@@ -129,7 +130,7 @@ binder.broadcast() | ||
if (values[i] !== sources[i]) { | ||
tryInvoke(releases[index]) | ||
tryInvoke(objectReleases[index]) | ||
sources[i] = values[i] | ||
changed = true | ||
if (binder.live) { | ||
releases[i] = bind(sources[i]) | ||
objectReleases[i] = bind(sources[i]) | ||
} | ||
@@ -143,7 +144,7 @@ } | ||
} else { | ||
tryInvoke(releases[index]) | ||
tryInvoke(objectReleases[index]) | ||
sources[i] = getObsValue(values[i]) | ||
changed = true | ||
if (binder.live) { | ||
releases[i] = bind(sources[i]) | ||
objectReleases[i] = bind(sources[i]) | ||
} | ||
@@ -153,3 +154,3 @@ } | ||
for (var index = length; index < sources.length; index++) { | ||
tryInvoke(releases[index]) | ||
tryInvoke(objectReleases[index]) | ||
changed = true | ||
@@ -159,3 +160,3 @@ } | ||
if (changed) { | ||
releases.length = length | ||
objectReleases.length = length | ||
sources.length = length | ||
@@ -168,3 +169,3 @@ object.length = length | ||
sources.length = 0 | ||
releases.length = 0 | ||
objectReleases.length = 0 | ||
object.length = 0 | ||
@@ -196,3 +197,3 @@ forEach(values, add) | ||
if (binder.live) { | ||
releases.push(bind(valueOrObs)) | ||
objectReleases.push(bind(valueOrObs)) | ||
} | ||
@@ -208,3 +209,3 @@ return valueOrObs | ||
sources.forEach(function (obs, i) { | ||
releases[i] = bind(obs) | ||
objectReleases[i] = bind(obs) | ||
}) | ||
@@ -221,5 +222,9 @@ | ||
function unlisten () { | ||
releases.forEach(tryInvoke) | ||
releases.length = 0 | ||
objectReleases.forEach(tryInvoke) | ||
objectReleases.length = 0 | ||
while (releases.length) { | ||
tryInvoke(releases.pop()) | ||
} | ||
if (opts && opts.onUnlisten) { | ||
@@ -226,0 +231,0 @@ opts.onUnlisten() |
33
dict.js
@@ -14,5 +14,6 @@ var Value = require('./value') | ||
var sources = {} | ||
var releases = {} | ||
var objectReleases = {} | ||
var fixedIndexing = opts && opts.fixedIndexing || false | ||
var releases = [] | ||
var comparer = opts && opts.comparer || null | ||
@@ -48,5 +49,5 @@ | ||
Object.keys(sources).forEach(function (key) { | ||
tryInvoke(releases[key]) | ||
tryInvoke(objectReleases[key]) | ||
delete sources[key] | ||
delete releases[key] | ||
delete objectReleases[key] | ||
delete object[key] | ||
@@ -58,5 +59,5 @@ }) | ||
observable.delete = function (key) { | ||
tryInvoke(releases[key]) | ||
tryInvoke(objectReleases[key]) | ||
delete sources[key] | ||
delete releases[key] | ||
delete objectReleases[key] | ||
delete object[key] | ||
@@ -85,5 +86,5 @@ binder.broadcast() | ||
if (!keys.includes(key)) { | ||
tryInvoke(releases[key]) | ||
tryInvoke(objectReleases[key]) | ||
delete sources[key] | ||
delete releases[key] | ||
delete objectReleases[key] | ||
delete object[key] | ||
@@ -94,5 +95,5 @@ } | ||
Object.keys(sources).forEach(function (key) { | ||
tryInvoke(releases[key]) | ||
tryInvoke(objectReleases[key]) | ||
delete sources[key] | ||
delete releases[key] | ||
delete objectReleases[key] | ||
delete object[key] | ||
@@ -118,6 +119,6 @@ }) | ||
function put (key, valueOrObs) { | ||
tryInvoke(releases[key]) | ||
tryInvoke(objectReleases[key]) | ||
sources[key] = valueOrObs | ||
if (binder.live) { | ||
releases[key] = bind(key, valueOrObs) | ||
objectReleases[key] = bind(key, valueOrObs) | ||
} | ||
@@ -138,3 +139,3 @@ object[key] = resolve(valueOrObs) | ||
Object.keys(sources).forEach(function (key) { | ||
releases[key] = bind(sources[key]) | ||
objectReleases[key] = bind(key, sources[key]) | ||
}) | ||
@@ -152,6 +153,10 @@ | ||
Object.keys(sources).forEach(function (key) { | ||
tryInvoke(releases[key]) | ||
delete releases[key] | ||
tryInvoke(objectReleases[key]) | ||
delete objectReleases[key] | ||
}) | ||
while (releases.length) { | ||
tryInvoke(releases.pop()) | ||
} | ||
if (opts && opts.onUnlisten) { | ||
@@ -158,0 +163,0 @@ opts.onUnlisten() |
{ | ||
"name": "@mmckegg/mutant", | ||
"version": "3.11.0", | ||
"version": "3.11.1", | ||
"description": "Create observables and map them to DOM elements. Massively inspired by hyperscript and observ-*. No virtual dom, just direct observable bindings. Unnecessary garbage collection is avoided by using mutable objects instead of blasting immutable junk all over the place.", | ||
@@ -5,0 +5,0 @@ "scripts": { |
@@ -25,2 +25,3 @@ var test = require('tape') | ||
var onUnlistenCount = 0 | ||
var onListenReleaseCount = 0 | ||
@@ -30,2 +31,5 @@ var obs = ctor({ | ||
onListenCount += 1 | ||
return () => { | ||
onListenReleaseCount += 1 | ||
} | ||
}, | ||
@@ -50,2 +54,3 @@ onUnlisten: () => { | ||
t.equal(onUnlistenCount, 1) | ||
t.equal(onListenReleaseCount, 1) | ||
@@ -57,2 +62,3 @@ var unlisten3 = obs(() => {}) | ||
t.equal(onUnlistenCount, 2) | ||
t.equal(onListenReleaseCount, 2) | ||
@@ -59,0 +65,0 @@ t.end() |
84759
2740