consistency fix

fix-untrack-expose-unsafe
Dominic Gannaway 9 months ago
parent 1941e82238
commit 3614f37177

@ -82,6 +82,8 @@ export let untracking = false;
export let unsafe_mutations = false;
export let unsafe_mutation_inside_effect = false;
/** @param {null | Reaction} reaction */
export function set_active_reaction(reaction) {
active_reaction = reaction;
@ -517,8 +519,10 @@ export function update_effect(effect) {
var previous_effect = active_effect;
var previous_component_context = component_context;
var previous_unsafe_mutation_inside_effect = unsafe_mutation_inside_effect;
active_effect = effect;
unsafe_mutation_inside_effect = false;
if (DEV) {
var previous_component_fn = dev_current_component_function;
@ -536,6 +540,18 @@ export function update_effect(effect) {
execute_effect_teardown(effect);
var teardown = update_reaction(effect);
effect.teardown = typeof teardown === 'function' ? teardown : null;
// If unsafe() has been used within the effect, then we might need
// to schedule another update for this effect in case the unsafe mutation
// has caused a this effect to become invalidated again
if (unsafe_mutation_inside_effect && (effect.f & CLEAN) !== 0) {
set_signal_status(effect, MAYBE_DIRTY);
if (check_dirtiness(effect)) {
set_signal_status(effect, DIRTY);
schedule_effect(effect);
}
}
effect.version = current_version;
if (DEV) {
@ -545,6 +561,7 @@ export function update_effect(effect) {
handle_error(error, effect, previous_effect, previous_component_context || effect.ctx);
} finally {
active_effect = previous_effect;
unsafe_mutation_inside_effect = previous_unsafe_mutation_inside_effect;
if (DEV) {
dev_current_component_function = previous_component_fn;
@ -1047,7 +1064,13 @@ export function unsafe(fn) {
var previous_unsafe_mutations = unsafe_mutations;
try {
unsafe_mutations = true;
return fn();
var val = fn();
if (is_flushing_effect) {
unsafe_mutation_inside_effect = true;
}
return val;
} finally {
unsafe_mutations = previous_unsafe_mutations;
}

Loading…
Cancel
Save