All files / src/compiler/phases/3-transform/client/visitors CallExpression.js

98% Statements 49/50
90.9% Branches 10/11
100% Functions 1/1
97.82% Lines 45/46

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 472x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 1742x 1742x   1742x 1742x 5x 1742x 1742x 5x 5x 5x 5x 5x 1742x 1742x 1x 1x 1x 1x 1x 1742x 1742x 7x 7x 7x 7x 1742x 1742x 1742x 12x 1742x 1712x 1712x 1712x  
/** @import { CallExpression, Expression } from 'estree' */
/** @import { Context } from '../types' */
import { is_ignored } from '../../../../state.js';
import * as b from '../../../../utils/builders.js';
import { get_rune } from '../../../scope.js';
import { transform_inspect_rune } from '../../utils.js';
 
/**
 * @param {CallExpression} node
 * @param {Context} context
 */
export function CallExpression(node, context) {
	switch (get_rune(node, context.state.scope)) {
		case '$host':
			return b.id('$$props.$$host');
 
		case '$effect.tracking':
			return b.call('$.effect_tracking');
 
		case '$state.snapshot':
			return b.call(
				'$.snapshot',
				/** @type {Expression} */ (context.visit(node.arguments[0])),
				is_ignored(node, 'state_snapshot_uncloneable') && b.true
			);
 
		case '$state.is':
			return b.call(
				'$.is',
				/** @type {Expression} */ (context.visit(node.arguments[0])),
				/** @type {Expression} */ (context.visit(node.arguments[1]))
			);
 
		case '$effect.root':
			return b.call(
				'$.effect_root',
				.../** @type {Expression[]} */ (node.arguments.map((arg) => context.visit(arg)))
			);
 
		case '$inspect':
		case '$inspect().with':
			return transform_inspect_rune(node, context);
	}
 
	context.next();
}