Rich Harris 8 months ago
parent 4f78f64df5
commit e15eae86b3

@ -167,8 +167,19 @@ export function VariableDeclaration(node, context) {
declarations.push(
b.declarator(
declarator.id,
b.await(
b.call('$.async_derived', rune === '$derived.by' ? value : b.thunk(value, true))
b.call(
b.member(
b.await(
b.call(
'$.suspend',
b.call(
'$.async_derived',
rune === '$derived.by' ? value : b.thunk(value, true)
)
)
),
'exit'
)
)
)
);

@ -17,18 +17,6 @@ export function get_value(node) {
*/
export function add_state_transformers(context) {
for (const [name, binding] of context.state.scope.declarations) {
if (
binding.kind === 'derived' &&
context.state.analysis.async_deriveds.has(/** @type {CallExpression} */ (binding.initial))
) {
// async deriveds are a special case
context.state.transform[name] = {
read: b.call
};
continue;
}
if (
is_state_source(binding, context.state.analysis) ||
binding.kind === 'derived' ||

@ -244,6 +244,9 @@ export function trigger_async_boundary(effect, trigger) {
}
}
// TODO separate this stuff out — suspending and context preservation should
// be distinct concepts
/**
* @template T
* @param {Promise<T>} promise

Loading…
Cancel
Save