read old values in teardown

read-old-values-in-teardown
Rich Harris 6 months ago
parent 0abd7f2a7f
commit e0b31efc9c

@ -159,6 +159,8 @@ export function set(source, value) {
return internal_set(source, value);
}
export const old_values = new Map();
/**
* @template V
* @param {Source<V>} source
@ -167,6 +169,8 @@ export function set(source, value) {
*/
export function internal_set(source, value) {
if (!source.equals(value)) {
old_values.set(source, source.v);
var old_value = source.v;
source.v = value;
source.wv = increment_write_version();

@ -25,7 +25,7 @@ import {
BOUNDARY_EFFECT
} from './constants.js';
import { flush_tasks } from './dom/task.js';
import { internal_set } from './reactivity/sources.js';
import { internal_set, old_values } from './reactivity/sources.js';
import { destroy_derived_effects, update_derived } from './reactivity/deriveds.js';
import * as e from './errors.js';
import { FILENAME } from '../../constants.js';
@ -673,6 +673,8 @@ function flush_queued_root_effects() {
if (DEV) {
dev_effect_stack = [];
}
old_values.clear();
}
}
@ -923,6 +925,10 @@ export function get(signal) {
}
}
if (is_destroying_effect && old_values.has(signal)) {
return old_values.get(signal);
}
return signal.v;
}

Loading…
Cancel
Save