Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2619x 2619x 2x 2x 2x 2x 2x 2x 6300x 10081x 10081x 10081x 9290x 10081x 855x 855x 855x 766x 766x 766x 8x 8x 766x 766x 855x 855x 86x 15x 15x 71x 71x 855x 855x 103x 103x 103x 103x 103x 103x 855x 855x 10081x 6300x | /** @import { Identifier } from 'estree' */
/** @import { ComponentContext, Context } from '../../types' */
import { is_state_source } from '../../utils.js';
import * as b from '../../../../../utils/builders.js';
/**
* Turns `foo` into `$.get(foo)`
* @param {Identifier} node
*/
export function get_value(node) {
return b.call('$.get', node);
}
/**
*
* @param {Context | ComponentContext} context
*/
export function add_state_transformers(context) {
for (const [name, binding] of context.state.scope.declarations) {
if (
is_state_source(binding, context.state.analysis) ||
binding.kind === 'derived' ||
binding.kind === 'legacy_reactive'
) {
context.state.transform[name] = {
read: binding.declaration_kind === 'var' ? (node) => b.call('$.safe_get', node) : get_value,
assign: (node, value) => {
let call = b.call('$.set', node, value);
if (context.state.scope.get(`$${node.name}`)?.kind === 'store_sub') {
call = b.call('$.store_unsub', call, b.literal(`$${node.name}`), b.id('$$stores'));
}
return call;
},
mutate: (node, mutation) => {
if (context.state.analysis.runes) {
return mutation;
}
return b.call('$.mutate', node, mutation);
},
update: (node) => {
return b.call(
node.prefix ? '$.update_pre' : '$.update',
node.argument,
node.operator === '--' && b.literal(-1)
);
}
};
}
}
}
|