1- import { batch , type BatchTask , tasks , toTask } from "../batch" ;
1+ import { batchFlush , batchStart , type BatchTask , tasks , toTask } from "../batch" ;
22import { type AddEventListener , event , send , size } from "../event" ;
33import { writable } from "../readable" ;
44import { type Disposer , type OwnedWritable , type Readable } from "../typings" ;
@@ -24,16 +24,16 @@ export class OwnedReactiveMap<K, V> extends Map<K, V> {
2424 * @returns A disposer function to unsubscribe from the event.
2525 */
2626 public onChanged ( fn : ( changed : ReactiveMapChanged < K , V > ) => void ) : Disposer {
27- return ( this . _onChanged_ ??= toTask ( event ( { delete : new Set ( ) , upsert : new Map ( ) } ) , ( ) => {
27+ return ( this . _onChanged_ ??= toTask ( event ( { delete_ : new Set ( ) , upsert_ : new Map ( ) } ) , ( ) => {
2828 if ( this . _onChanged_ && size ( this . _onChanged_ ) ) {
2929 const { data_ } = this . _onChanged_ ;
30- if ( data_ . upsert . size > 0 || data_ . delete . size > 0 ) {
30+ if ( data_ . upsert_ . size > 0 || data_ . delete_ . size > 0 ) {
3131 const changedData = {
32- upsert : [ ...data_ . upsert ] ,
33- delete : [ ...data_ . delete ] ,
32+ upsert : [ ...data_ . upsert_ ] ,
33+ delete : [ ...data_ . delete_ ] ,
3434 } ;
35- data_ . upsert . clear ( ) ;
36- data_ . delete . clear ( ) ;
35+ data_ . upsert_ . clear ( ) ;
36+ data_ . delete_ . clear ( ) ;
3737 send ( this . _onChanged_ , changedData ) ;
3838 }
3939 } else {
@@ -77,11 +77,11 @@ export class OwnedReactiveMap<K, V> extends Map<K, V> {
7777 super ( ) ;
7878
7979 if ( entries ) {
80- batch ( ( ) => {
81- for ( const [ key , value ] of entries ) {
82- this . set ( key , value ) ;
83- }
84- } ) ;
80+ const isBatchTop = batchStart ( ) ;
81+ for ( const [ key , value ] of entries ) {
82+ this . set ( key , value ) ;
83+ }
84+ isBatchTop && batchFlush ( ) ;
8585 }
8686 }
8787
@@ -98,9 +98,9 @@ export class OwnedReactiveMap<K, V> extends Map<K, V> {
9898 data_ . add ( value ) ;
9999 }
100100 if ( data_ . size ) {
101- batch ( ( ) => {
102- tasks . add ( this . _onDisposeValue_ ! ) ;
103- } ) ;
101+ const isBatchTop = batchStart ( ) ;
102+ tasks . add ( this . _onDisposeValue_ ! ) ;
103+ isBatchTop && batchFlush ( ) ;
104104 }
105105 }
106106 this . _$ = this . _onChanged_ = this . _onDisposeValue_ = undefined ;
@@ -110,60 +110,68 @@ export class OwnedReactiveMap<K, V> extends Map<K, V> {
110110 if ( this . has ( key ) ) {
111111 const oldValue = this . get ( key ) ! ;
112112 if ( ! strictEqual ( oldValue , value ) ) {
113+ const isBatchTop = batchStart ( ) ;
113114 // task added in this._upsert_
114115 this . _onDisposeValue_ ?. data_ . add ( oldValue ) ;
115116 this . _upsert_ ( key , value ) ;
117+ isBatchTop && batchFlush ( ) ;
116118 }
117119 } else {
120+ const isBatchTop = batchStart ( ) ;
118121 this . _upsert_ ( key , value ) ;
122+ isBatchTop && batchFlush ( ) ;
119123 }
120124 return this ;
121125 }
122126
123127 public override delete ( key : K ) : boolean {
124128 if ( this . has ( key ) ) {
129+ const isBatchTop = batchStart ( ) ;
125130 if ( this . _onDisposeValue_ ) {
126131 this . _onDisposeValue_ . data_ . add ( this . get ( key ) ! ) ;
127132 tasks . add ( this . _onDisposeValue_ ) ;
128133 }
129134 if ( this . _onChanged_ ) {
130- this . _onChanged_ . data_ . delete . add ( key ) ;
131- this . _onChanged_ . data_ . upsert . delete ( key ) ;
135+ this . _onChanged_ . data_ . delete_ . add ( key ) ;
136+ this . _onChanged_ . data_ . upsert_ . delete ( key ) ;
132137 tasks . add ( this . _onChanged_ ) ;
133138 }
134139 this . _notify_ ( ) ;
140+ isBatchTop && batchFlush ( ) ;
135141 }
136142 return super . delete ( key ) ;
137143 }
138144
139145 public override clear ( ) : void {
140146 if ( this . size ) {
147+ const isBatchTop = batchStart ( ) ;
141148 if ( this . _onDisposeValue_ || this . _onChanged_ ) {
142149 for ( const [ key , value ] of this ) {
143150 if ( this . _onDisposeValue_ ) {
144151 this . _onDisposeValue_ . data_ . add ( value ) ;
145152 tasks . add ( this . _onDisposeValue_ ) ;
146153 }
147154 if ( this . _onChanged_ ) {
148- this . _onChanged_ . data_ . delete . add ( key ) ;
149- this . _onChanged_ . data_ . upsert . delete ( key ) ;
155+ this . _onChanged_ . data_ . delete_ . add ( key ) ;
156+ this . _onChanged_ . data_ . upsert_ . delete ( key ) ;
150157 tasks . add ( this . _onChanged_ ) ;
151158 }
152159 }
153160 }
154161 super . clear ( ) ;
155162 this . _notify_ ( ) ;
163+ isBatchTop && batchFlush ( ) ;
156164 }
157165 }
158166
159167 public rename ( key : K , newKey : K ) : void {
160- batch ( ( ) => {
161- if ( this . has ( key ) ) {
162- const value = this . get ( key ) ! ;
163- this . delete ( key ) ;
164- this . set ( newKey , value ) ;
165- }
166- } ) ;
168+ if ( this . has ( key ) ) {
169+ const isBatchTop = batchStart ( ) ;
170+ const value = this . get ( key ) ! ;
171+ this . delete ( key ) ;
172+ this . set ( newKey , value ) ;
173+ isBatchTop && batchFlush ( ) ;
174+ }
167175 }
168176
169177 /**
@@ -179,8 +187,8 @@ export class OwnedReactiveMap<K, V> extends Map<K, V> {
179187 AddEventListener <
180188 ReactiveMapChanged < K , V > ,
181189 {
182- readonly upsert : Map < K , V > ;
183- readonly delete : Set < K > ;
190+ readonly upsert_ : Map < K , V > ;
191+ readonly delete_ : Set < K > ;
184192 }
185193 >
186194 > ;
@@ -195,8 +203,8 @@ export class OwnedReactiveMap<K, V> extends Map<K, V> {
195203 tasks . add ( this . _onDisposeValue_ ) ;
196204 }
197205 if ( this . _onChanged_ ) {
198- this . _onChanged_ . data_ . upsert . set ( key , value ) ;
199- this . _onChanged_ . data_ . delete . delete ( key ) ;
206+ this . _onChanged_ . data_ . upsert_ . set ( key , value ) ;
207+ this . _onChanged_ . data_ . delete_ . delete ( key ) ;
200208 tasks . add ( this . _onChanged_ ) ;
201209 }
202210 super . set ( key , value ) ;
0 commit comments