@@ -111,28 +111,34 @@ export function boundary(node, props, boundary_fn) {
111
111
suspend_count ++ ;
112
112
113
113
if ( suspended_effect === null ) {
114
- var effect = boundary_effect ;
115
- suspended_effect = boundary_effect ;
116
-
117
- pause_effect ( suspended_effect , ( ) => {
118
- /** @type {TemplateNode | null } */
119
- var node = effect . nodes_start ;
120
- var end = effect . nodes_end ;
121
- suspended_fragment = document . createDocumentFragment ( ) ;
122
-
123
- while ( node !== null ) {
124
- /** @type {TemplateNode | null } */
125
- var sibling =
126
- node === end ? null : /** @type {TemplateNode } */ ( get_next_sibling ( node ) ) ;
127
-
128
- node . remove ( ) ;
129
- suspended_fragment . append ( node ) ;
130
- node = sibling ;
131
- }
132
- } , false ) ;
133
-
134
- render_snippet ( ( ) => {
135
- pending ( anchor ) ;
114
+ queue_micro_task ( ( ) => {
115
+ var effect = boundary_effect ;
116
+ suspended_effect = boundary_effect ;
117
+
118
+ pause_effect (
119
+ suspended_effect ,
120
+ ( ) => {
121
+ /** @type {TemplateNode | null } */
122
+ var node = effect . nodes_start ;
123
+ var end = effect . nodes_end ;
124
+ suspended_fragment = document . createDocumentFragment ( ) ;
125
+
126
+ while ( node !== null ) {
127
+ /** @type {TemplateNode | null } */
128
+ var sibling =
129
+ node === end ? null : /** @type {TemplateNode } */ ( get_next_sibling ( node ) ) ;
130
+
131
+ node . remove ( ) ;
132
+ suspended_fragment . append ( node ) ;
133
+ node = sibling ;
134
+ }
135
+ } ,
136
+ false
137
+ ) ;
138
+
139
+ render_snippet ( ( ) => {
140
+ pending ( anchor ) ;
141
+ } ) ;
136
142
} ) ;
137
143
}
138
144
return true ;
@@ -211,30 +217,34 @@ export function boundary(node, props, boundary_fn) {
211
217
}
212
218
}
213
219
214
- export function suspend ( ) {
215
- var current = active_effect ;
220
+ /**
221
+ * @param {Effect | null } effect
222
+ * @param {typeof SUSPEND_INCREMENT | typeof SUSPEND_DECREMENT } trigger
223
+ */
224
+ function trigger_suspense ( effect , trigger ) {
225
+ var current = effect ;
216
226
217
227
while ( current !== null ) {
218
228
if ( ( current . f & BOUNDARY_EFFECT ) !== 0 ) {
219
229
// @ts -ignore
220
- if ( current . fn ( SUSPEND_INCREMENT ) ) {
230
+ if ( current . fn ( trigger ) ) {
221
231
return ;
222
232
}
223
233
}
224
234
current = current . parent ;
225
235
}
226
236
}
227
237
228
- export function unsuspend ( ) {
238
+ export function create_suspense ( ) {
229
239
var current = active_effect ;
230
240
231
- while ( current !== null ) {
232
- if ( ( current . f & BOUNDARY_EFFECT ) !== 0 ) {
233
- // @ts -ignore
234
- if ( current . fn ( SUSPEND_DECREMENT ) ) {
235
- return ;
236
- }
237
- }
238
- current = current . parent ;
239
- }
241
+ const suspend = ( ) => {
242
+ trigger_suspense ( current , SUSPEND_INCREMENT ) ;
243
+ } ;
244
+
245
+ const unsuspend = ( ) => {
246
+ trigger_suspense ( current , SUSPEND_DECREMENT ) ;
247
+ } ;
248
+
249
+ return [ suspend , unsuspend ] ;
240
250
}
0 commit comments