mirror of https://github.com/sveltejs/svelte
parent
5d2a825ec7
commit
3fdd58603d
@ -0,0 +1,36 @@
|
||||
import { CLEAN, DERIVED, UNINITIALIZED, UNOWNED } from '../constants.js';
|
||||
import { current_block, current_consumer, current_effect } from '../runtime.js';
|
||||
import { create_computation_signal, push_reference } from './effects.js';
|
||||
import { default_equals, safe_equal } from './equality.js';
|
||||
|
||||
/**
|
||||
* @template V
|
||||
* @param {() => V} fn
|
||||
* @returns {import('../types.js').ComputationSignal<V>}
|
||||
*/
|
||||
/*#__NO_SIDE_EFFECTS__*/
|
||||
export function derived(fn) {
|
||||
const is_unowned = current_effect === null;
|
||||
const flags = is_unowned ? DERIVED | UNOWNED : DERIVED;
|
||||
const signal = /** @type {import('../types.js').ComputationSignal<V>} */ (
|
||||
create_computation_signal(flags | CLEAN, UNINITIALIZED, current_block)
|
||||
);
|
||||
signal.i = fn;
|
||||
signal.e = default_equals;
|
||||
if (current_consumer !== null) {
|
||||
push_reference(current_consumer, signal);
|
||||
}
|
||||
return signal;
|
||||
}
|
||||
|
||||
/**
|
||||
* @template V
|
||||
* @param {() => V} fn
|
||||
* @returns {import('../types.js').ComputationSignal<V>}
|
||||
*/
|
||||
/*#__NO_SIDE_EFFECTS__*/
|
||||
export function derived_safe_equal(fn) {
|
||||
const signal = derived(fn);
|
||||
signal.e = safe_equal;
|
||||
return signal;
|
||||
}
|
||||
Loading…
Reference in new issue