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 1964x 1964x   1964x 1964x 7x 1964x 1964x 6x 6x 6x 6x 6x 1964x 1964x 1x 1x 1x 1x 1x 1964x 1964x 7x 7x 7x 7x 1964x 1964x 1964x 13x 1964x 1930x 1930x 1930x  
/** @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();
}