add `$effect.pending()`

pull/16197/head
Rich Harris 7 months ago
parent a0a4d4f598
commit 31882d1d2d

@ -30,6 +30,9 @@ export function CallExpression(node, context) {
.../** @type {Expression[]} */ (node.arguments.map((arg) => context.visit(arg)))
);
case '$effect.pending':
return b.call('$.get', b.id('$.pending'));
case '$inspect':
case '$inspect().with':
return transform_inspect_rune(node, context);

@ -25,6 +25,10 @@ export function CallExpression(node, context) {
return b.arrow([], b.block([]));
}
if (rune === '$effect.pending') {
return b.false;
}
if (rune === '$state.snapshot') {
return b.call(
'$.snapshot',

@ -115,6 +115,7 @@ export {
user_effect,
user_pre_effect
} from './reactivity/effects.js';
export { pending } from './reactivity/forks.js';
export { mutable_state, mutate, set, state, update, update_pre } from './reactivity/sources.js';
export {
prop,

@ -1,6 +1,7 @@
/** @import { Effect, Source } from '#client' */
import { noop } from '../../shared/utils.js';
import { flushSync } from '../runtime.js';
import { internal_set, source } from './sources.js';
/** @type {Set<Fork>} */
const forks = new Set();
@ -12,6 +13,12 @@ export function remove_active_fork() {
active_fork = null;
}
export let pending = source(false);
function update_pending() {
internal_set(pending, forks.size > 0);
}
let uid = 1;
export class Fork {
@ -97,6 +104,8 @@ export class Fork {
}
}
}
update_pending();
}
/**
@ -134,6 +143,10 @@ export class Fork {
static ensure() {
if (active_fork === null) {
if (forks.size === 0) {
requestAnimationFrame(update_pending);
}
active_fork = new Fork();
forks.add(active_fork); // TODO figure out where we remove this
}

@ -441,6 +441,7 @@ const RUNES = /** @type {const} */ ([
'$effect.pre',
'$effect.tracking',
'$effect.root',
'$effect.pending',
'$inspect',
'$inspect().with',
'$inspect.trace',

Loading…
Cancel
Save