pull/1400/merge
Brian Takita 8 years ago committed by GitHub
commit 2dcd2a240b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -52,26 +52,28 @@ assign(Store.prototype, {
var cycles; var cycles;
var visited = blankObject(); var visited = blankObject();
function visit(key) { function visit(key, rootKey) {
if (visited[key]) return;
if (cycles[key]) { if (cycles[key]) {
throw new Error('Cyclical dependency detected'); throw new Error('Cyclical dependency detected. key: ' + key + ' rootKey: ' + rootKey);
} }
if (visited[key]) return;
visited[key] = true;
var c = computed[key]; var c = computed[key];
if (c) { if (c) {
cycles[key] = true; cycles[key] = true;
c.deps.forEach(visit); c.deps.forEach(function(dep) {
visit(dep, rootKey)
});
sorted.push(c); sorted.push(c);
visited[key] = true;
} }
} }
for (var key in this._computed) { for (var key in this._computed) {
cycles = blankObject(); cycles = blankObject();
visit(key); visit(key, key);
} }
}, },

@ -0,0 +1,22 @@
import { Store } from '../../../../store.js';
const store = new Store();
export default {
store,
test(assert, component, target) {
store.compute('dep4', ['dep1', 'dep2', 'dep3'], (...args) => ['dep4'].concat(...args));
store.compute('dep1', ['source'], (...args) => ['dep1'].concat(...args));
store.compute('dep2', ['dep1'], (...args) => ['dep2'].concat(...args));
store.compute('dep3', ['dep1', 'dep2'], (...args) => ['dep3'].concat(...args));
store.set({source: 'source'});
assert.equal(JSON.stringify(store.get().dep4), JSON.stringify([
'dep4',
'dep1', 'source',
'dep2', 'dep1', 'source',
'dep3', 'dep1', 'source',
'dep2', 'dep1', 'source'
]));
}
};
Loading…
Cancel
Save