@ -80,10 +80,9 @@ function push_effect(effect, parent_effect) {
/ * *
* @ param { number } type
* @ param { null | ( ( ) => void | ( ( ) => void ) ) } fn
* @ param { boolean } sync
* @ returns { Effect }
* /
function create _effect ( type , fn , sync ) {
function create _effect ( type , fn ) {
var parent = active _effect ;
if ( DEV ) {
@ -119,36 +118,39 @@ function create_effect(type, fn, sync) {
effect . component _function = dev _current _component _function ;
}
if ( sync ) {
/** @type {Effect | null} */
var e = effect ;
if ( ( type & EFFECT ) !== 0 ) {
if ( collected _effects !== null ) {
// created during traversal — collect and run afterwards
collected _effects . push ( effect ) ;
} else {
// schedule for later
schedule _effect ( effect ) ;
}
} else if ( fn !== null ) {
try {
update _effect ( effect ) ;
} catch ( e ) {
destroy _effect ( effect ) ;
throw e ;
}
} else if ( ( type & EFFECT ) !== 0 && collected _effects !== null ) {
collected _effects . push ( effect ) ;
} else if ( fn !== null ) {
schedule _effect ( effect ) ;
}
/** @type {Effect | null} */
var e = effect ;
// if an effect has already ran and doesn't need to be kept in the tree
// (because it won't re-run, has no DOM, and has no teardown etc)
// then we skip it and go to its child (if any)
if (
sync &&
e . deps === null &&
e . teardown === null &&
e . nodes === null &&
e . first === e . last && // either `null`, or a singular child
( e . f & EFFECT _PRESERVED ) === 0
) {
e = e . first ;
if ( ( type & BLOCK _EFFECT ) !== 0 && ( type & EFFECT _TRANSPARENT ) !== 0 && e !== null ) {
e . f |= EFFECT _TRANSPARENT ;
// if an effect doesn't need to be kept in the tree (because it
// won't re-run, has no DOM, and has no teardown etc)
// then we skip it and go to its child (if any)
if (
e . deps === null &&
e . teardown === null &&
e . nodes === null &&
e . first === e . last && // either `null`, or a singular child
( e . f & EFFECT _PRESERVED ) === 0
) {
e = e . first ;
if ( ( type & BLOCK _EFFECT ) !== 0 && ( type & EFFECT _TRANSPARENT ) !== 0 && e !== null ) {
e . f |= EFFECT _TRANSPARENT ;
}
}
}
@ -185,7 +187,7 @@ export function effect_tracking() {
* @ param { ( ) => void } fn
* /
export function teardown ( fn ) {
const effect = create _effect ( RENDER _EFFECT , null , false );
const effect = create _effect ( RENDER _EFFECT , null );
set _signal _status ( effect , CLEAN ) ;
effect . teardown = fn ;
return effect ;
@ -223,7 +225,7 @@ export function user_effect(fn) {
* @ param { ( ) => void | ( ( ) => void ) } fn
* /
export function create _user _effect ( fn ) {
return create _effect ( EFFECT | USER _EFFECT , fn , false );
return create _effect ( EFFECT | USER _EFFECT , fn );
}
/ * *
@ -238,12 +240,12 @@ export function user_pre_effect(fn) {
value : '$effect.pre'
} ) ;
}
return create _effect ( RENDER _EFFECT | USER _EFFECT , fn , true );
return create _effect ( RENDER _EFFECT | USER _EFFECT , fn );
}
/** @param {() => void | (() => void)} fn */
export function eager _effect ( fn ) {
return create _effect ( EAGER _EFFECT , fn , true );
return create _effect ( EAGER _EFFECT , fn );
}
/ * *
@ -253,7 +255,7 @@ export function eager_effect(fn) {
* /
export function effect _root ( fn ) {
Batch . ensure ( ) ;
const effect = create _effect ( ROOT _EFFECT | EFFECT _PRESERVED , fn , true );
const effect = create _effect ( ROOT _EFFECT | EFFECT _PRESERVED , fn );
return ( ) => {
destroy _effect ( effect ) ;
@ -267,7 +269,7 @@ export function effect_root(fn) {
* /
export function component _root ( fn ) {
Batch . ensure ( ) ;
const effect = create _effect ( ROOT _EFFECT | EFFECT _PRESERVED , fn , true );
const effect = create _effect ( ROOT _EFFECT | EFFECT _PRESERVED , fn );
return ( options = { } ) => {
return new Promise ( ( fulfil ) => {
@ -289,7 +291,7 @@ export function component_root(fn) {
* @ returns { Effect }
* /
export function effect ( fn ) {
return create _effect ( EFFECT , fn , false );
return create _effect ( EFFECT , fn );
}
/ * *
@ -347,7 +349,7 @@ export function legacy_pre_effect_reset() {
* @ returns { Effect }
* /
export function async _effect ( fn ) {
return create _effect ( ASYNC | EFFECT _PRESERVED , fn , true );
return create _effect ( ASYNC | EFFECT _PRESERVED , fn );
}
/ * *
@ -355,7 +357,7 @@ export function async_effect(fn) {
* @ returns { Effect }
* /
export function render _effect ( fn , flags = 0 ) {
return create _effect ( RENDER _EFFECT | flags , fn , true );
return create _effect ( RENDER _EFFECT | flags , fn );
}
/ * *
@ -366,7 +368,7 @@ export function render_effect(fn, flags = 0) {
* /
export function template _effect ( fn , sync = [ ] , async = [ ] , blockers = [ ] ) {
flatten ( blockers , sync , async , ( values ) => {
create _effect ( RENDER _EFFECT , ( ) => fn ( ... values . map ( get ) ) , true );
create _effect ( RENDER _EFFECT , ( ) => fn ( ... values . map ( get ) ) );
} ) ;
}
@ -383,7 +385,7 @@ export function deferred_template_effect(fn, sync = [], async = [], blockers = [
}
flatten ( blockers , sync , async , ( values ) => {
create _effect ( EFFECT , ( ) => fn ( ... values . map ( get ) ) , false );
create _effect ( EFFECT , ( ) => fn ( ... values . map ( get ) ) );
if ( decrement _pending ) {
decrement _pending ( ) ;
@ -396,7 +398,7 @@ export function deferred_template_effect(fn, sync = [], async = [], blockers = [
* @ param { number } flags
* /
export function block ( fn , flags = 0 ) {
var effect = create _effect ( BLOCK _EFFECT | flags , fn , true );
var effect = create _effect ( BLOCK _EFFECT | flags , fn );
if ( DEV ) {
effect . dev _stack = dev _stack ;
}
@ -408,7 +410,7 @@ export function block(fn, flags = 0) {
* @ param { number } flags
* /
export function managed ( fn , flags = 0 ) {
var effect = create _effect ( MANAGED _EFFECT | flags , fn , true );
var effect = create _effect ( MANAGED _EFFECT | flags , fn );
if ( DEV ) {
effect . dev _stack = dev _stack ;
}
@ -419,7 +421,7 @@ export function managed(fn, flags = 0) {
* @ param { ( ( ) => void ) } fn
* /
export function branch ( fn ) {
return create _effect ( BRANCH _EFFECT | EFFECT _PRESERVED , fn , true );
return create _effect ( BRANCH _EFFECT | EFFECT _PRESERVED , fn );
}
/ * *