allow stores to work with mutable data - fixes #2171

pull/2190/head
Richard Harris 6 years ago
parent 333b933837
commit 41b14606b4

@ -1,14 +1,15 @@
import { run_all, noop, get_store_value } from './internal';
import { run_all, noop, get_store_value, safe_not_equal } from './internal';
export function readable(start, value) {
const subscribers = [];
let stop;
function set(newValue) {
if (newValue === value) return;
value = newValue;
subscribers.forEach(s => s[1]());
subscribers.forEach(s => s[0](value));
function set(new_value) {
if (safe_not_equal(value, new_value)) {
value = new_value;
subscribers.forEach(s => s[1]());
subscribers.forEach(s => s[0](value));
}
}
return {
@ -38,11 +39,12 @@ export function writable(value, start = noop) {
let stop;
const subscribers = [];
function set(newValue) {
if (newValue === value) return;
value = newValue;
subscribers.forEach(s => s[1]());
subscribers.forEach(s => s[0](value));
function set(new_value) {
if (safe_not_equal(value, new_value)) {
value = new_value;
subscribers.forEach(s => s[1]());
subscribers.forEach(s => s[0](value));
}
}
function update(fn) {

@ -1,7 +1,7 @@
import * as assert from 'assert';
import { readable, writable, derive, get } from '../../store.js';
describe('store', () => {
describe.only('store', () => {
describe('writable', () => {
it('creates a writable store', () => {
const count = writable(0);
@ -42,6 +42,23 @@ describe('store', () => {
unsubscribe2();
assert.equal(called, 0);
});
it('does not assume immutable data', () => {
const obj = {};
let called = 0;
const store = writable(obj);
store.subscribe(value => {
called += 1;
});
store.set(obj);
assert.equal(called, 2);
store.update(obj => obj);
assert.equal(called, 3);
});
});
describe('readable', () => {

Loading…
Cancel
Save