@@ -67,16 +67,15 @@ export function writable<T>(value: T, start: StartStopNotifier<T> = noop): Writa
67
67
function set ( new_value : T ) : void {
68
68
if ( safe_not_equal ( value , new_value ) ) {
69
69
value = new_value ;
70
- if ( ! stop ) {
71
- return ; // not ready
70
+ if ( stop ) { // store is ready
71
+ subscribers . forEach ( ( s ) => s [ 1 ] ( ) ) ;
72
+ subscribers . forEach ( ( s ) => s [ 0 ] ( value ) ) ;
72
73
}
73
- subscribers . forEach ( ( s ) => s [ 1 ] ( ) ) ;
74
- subscribers . forEach ( ( s ) => s [ 0 ] ( value ) ) ;
75
74
}
76
75
}
77
76
78
77
function update ( fn : Updater < T > ) : void {
79
- set ( fn ( value ) ) ;
78
+ return set ( fn ( value ) ) ;
80
79
}
81
80
82
81
function subscribe ( run : Subscriber < T > , invalidate : Invalidator < T > = noop ) : Unsubscriber {
@@ -129,7 +128,9 @@ export function derived<T, S extends Stores>(
129
128
130
129
const auto = fn . length < 2 ;
131
130
131
+ const subscribers : Array < Subscriber < T > > = [ ] ;
132
132
const invalidators : Array < Invalidator < T > > = [ ] ;
133
+ let value : T = initial_value ;
133
134
134
135
const store = readable ( initial_value , ( set ) => {
135
136
let inited = false ;
@@ -146,6 +147,11 @@ export function derived<T, S extends Stores>(
146
147
const result = fn ( single ? values [ 0 ] : values , set ) ;
147
148
if ( auto ) {
148
149
set ( result as T ) ;
150
+ const dirty = safe_not_equal ( value , result ) ;
151
+ value = result as T ;
152
+ if ( ! dirty ) {
153
+ subscribers . forEach ( s => s ( value ) ) ;
154
+ }
149
155
} else {
150
156
cleanup = is_function ( result ) ? result as Unsubscriber : noop ;
151
157
}
@@ -176,6 +182,7 @@ export function derived<T, S extends Stores>(
176
182
177
183
return {
178
184
subscribe ( run : Subscriber < T > , invalidate : Invalidator < T > = noop ) : Unsubscriber {
185
+ subscribers . push ( run ) ;
179
186
invalidators . push ( invalidate ) ;
180
187
181
188
const unsubscribe = store . subscribe ( run , invalidate ) ;
@@ -189,4 +196,4 @@ export function derived<T, S extends Stores>(
189
196
} ;
190
197
}
191
198
} ;
192
- }
199
+ }
0 commit comments