split computations.js into deriveds.js and effects.js

pull/10696/head
Rich Harris 3 years ago
parent 5d2a825ec7
commit 3fdd58603d

@ -1,6 +1,6 @@
import { createClassComponent } from '../../legacy/legacy-client.js'; import { createClassComponent } from '../../legacy/legacy-client.js';
import { destroy_signal } from './runtime.js'; import { destroy_signal } from './runtime.js';
import { render_effect } from './reactivity/computations.js'; import { render_effect } from './reactivity/effects.js';
import { open, close } from './render.js'; import { open, close } from './render.js';
import { define_property } from './utils.js'; import { define_property } from './utils.js';

@ -8,7 +8,7 @@ import {
flushSync, flushSync,
push_destroy_fn push_destroy_fn
} from '../../runtime.js'; } from '../../runtime.js';
import { render_effect } from '../../reactivity/computations.js'; import { render_effect } from '../../reactivity/effects.js';
import { trigger_transitions } from '../../transitions.js'; import { trigger_transitions } from '../../transitions.js';
import { AWAIT_BLOCK, UNINITIALIZED } from '../../constants.js'; import { AWAIT_BLOCK, UNINITIALIZED } from '../../constants.js';

@ -23,7 +23,7 @@ import {
push_destroy_fn, push_destroy_fn,
set_signal_value set_signal_value
} from '../../runtime.js'; } from '../../runtime.js';
import { render_effect } from '../../reactivity/computations.js'; import { render_effect } from '../../reactivity/effects.js';
import { source, mutable_source } from '../../reactivity/sources.js'; import { source, mutable_source } from '../../reactivity/sources.js';
import { trigger_transitions } from '../../transitions.js'; import { trigger_transitions } from '../../transitions.js';
import { is_array } from '../../utils.js'; import { is_array } from '../../utils.js';

@ -7,7 +7,7 @@ import {
} from '../../hydration.js'; } from '../../hydration.js';
import { remove } from '../../reconciler.js'; import { remove } from '../../reconciler.js';
import { current_block, destroy_signal, execute_effect, push_destroy_fn } from '../../runtime.js'; import { current_block, destroy_signal, execute_effect, push_destroy_fn } from '../../runtime.js';
import { render_effect } from '../../reactivity/computations.js'; import { render_effect } from '../../reactivity/effects.js';
import { trigger_transitions } from '../../transitions.js'; import { trigger_transitions } from '../../transitions.js';
/** @returns {import('../../types.js').IfBlock} */ /** @returns {import('../../types.js').IfBlock} */

@ -2,7 +2,7 @@ import { UNINITIALIZED, KEY_BLOCK } from '../../constants.js';
import { hydrate_block_anchor } from '../../hydration.js'; import { hydrate_block_anchor } from '../../hydration.js';
import { remove } from '../../reconciler.js'; import { remove } from '../../reconciler.js';
import { current_block, destroy_signal, execute_effect, push_destroy_fn } from '../../runtime.js'; import { current_block, destroy_signal, execute_effect, push_destroy_fn } from '../../runtime.js';
import { render_effect } from '../../reactivity/computations.js'; import { render_effect } from '../../reactivity/effects.js';
import { trigger_transitions } from '../../transitions.js'; import { trigger_transitions } from '../../transitions.js';
import { safe_not_equal } from '../../reactivity/equality.js'; import { safe_not_equal } from '../../reactivity/equality.js';

@ -8,7 +8,7 @@ import {
untrack, untrack,
set_signal_value set_signal_value
} from './runtime.js'; } from './runtime.js';
import { effect_active } from './reactivity/computations.js'; import { effect_active } from './reactivity/effects.js';
import { import {
array_prototype, array_prototype,
define_property, define_property,

@ -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;
}

@ -27,7 +27,7 @@ import {
* @param {V} value * @param {V} value
* @param {import('../types.js').Block | null} block * @param {import('../types.js').Block | null} block
*/ */
function create_computation_signal(flags, value, block) { export function create_computation_signal(flags, value, block) {
/** @type {import('../types.js').ComputationSignal<V>} */ /** @type {import('../types.js').ComputationSignal<V>} */
const signal = { const signal = {
b: block, b: block,
@ -224,35 +224,3 @@ export function render_effect(fn, block = current_block, managed = false, sync =
} }
return internal_create_effect(flags, /** @type {any} */ (fn), sync, block, true); return internal_create_effect(flags, /** @type {any} */ (fn), sync, block, true);
} }
/**
* @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;
}

@ -2,7 +2,7 @@ import { subscribe_to_store } from '../../../store/utils.js';
import { noop } from '../../common.js'; import { noop } from '../../common.js';
import { UNINITIALIZED } from '../constants.js'; import { UNINITIALIZED } from '../constants.js';
import { get, set, set_ignore_mutation_validation, untrack } from '../runtime.js'; import { get, set, set_ignore_mutation_validation, untrack } from '../runtime.js';
import { user_effect } from './computations.js'; import { user_effect } from './effects.js';
import { mutable_source } from './sources.js'; import { mutable_source } from './sources.js';
/** /**

@ -50,14 +50,14 @@ import {
inspect_fn, inspect_fn,
deep_read_state deep_read_state
} from './runtime.js'; } from './runtime.js';
import { derived } from './reactivity/deriveds.js';
import { import {
render_effect, render_effect,
effect, effect,
managed_effect, managed_effect,
derived,
pre_effect, pre_effect,
user_effect user_effect
} from './reactivity/computations.js'; } from './reactivity/effects.js';
import { import {
current_hydration_fragment, current_hydration_fragment,
get_hydration_fragment, get_hydration_fragment,

@ -10,7 +10,7 @@ import {
object_prototype object_prototype
} from './utils.js'; } from './utils.js';
import { unstate } from './proxy.js'; import { unstate } from './proxy.js';
import { pre_effect } from './reactivity/computations.js'; import { pre_effect } from './reactivity/effects.js';
import { import {
EACH_BLOCK, EACH_BLOCK,
IF_BLOCK, IF_BLOCK,

@ -12,7 +12,7 @@ import {
import { destroy_each_item_block, get_first_element } from './dom/blocks/each.js'; import { destroy_each_item_block, get_first_element } from './dom/blocks/each.js';
import { schedule_raf_task } from './dom/task.js'; import { schedule_raf_task } from './dom/task.js';
import { append_child, empty } from './operations.js'; import { append_child, empty } from './operations.js';
import { effect, managed_effect, managed_pre_effect } from './reactivity/computations.js'; import { effect, managed_effect, managed_pre_effect } from './reactivity/effects.js';
import { import {
current_block, current_block,
current_effect, current_effect,

@ -28,7 +28,8 @@ export { await_block as await } from './client/dom/blocks/await.js';
export { if_block as if } from './client/dom/blocks/if.js'; export { if_block as if } from './client/dom/blocks/if.js';
export { key_block as key } from './client/dom/blocks/key.js'; export { key_block as key } from './client/dom/blocks/key.js';
export * from './client/dom/blocks/each.js'; export * from './client/dom/blocks/each.js';
export * from './client/reactivity/computations.js'; export * from './client/reactivity/deriveds.js';
export * from './client/reactivity/effects.js';
export * from './client/reactivity/sources.js'; export * from './client/reactivity/sources.js';
export * from './client/reactivity/equality.js'; export * from './client/reactivity/equality.js';
export * from './client/reactivity/props.js'; export * from './client/reactivity/props.js';

@ -1,11 +1,7 @@
import { describe, assert, it } from 'vitest'; import { describe, assert, it } from 'vitest';
import * as $ from '../../src/internal/client/runtime'; import * as $ from '../../src/internal/client/runtime';
import { import { derived } from '../../src/internal/client/reactivity/deriveds';
derived, import { effect, render_effect, user_effect } from '../../src/internal/client/reactivity/effects';
effect,
render_effect,
user_effect
} from '../../src/internal/client/reactivity/computations';
import { source } from '../../src/internal/client/reactivity/sources'; import { source } from '../../src/internal/client/reactivity/sources';
import type { ComputationSignal } from '../../src/internal/client/types'; import type { ComputationSignal } from '../../src/internal/client/types';
import { proxy } from '../../src/internal/client/proxy'; import { proxy } from '../../src/internal/client/proxy';

Loading…
Cancel
Save