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

95.55% Statements 43/45
91.66% Branches 11/12
100% Functions 1/1
95.12% Lines 39/41

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 422x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 1629x 1629x 1629x     1629x 1629x 4x 4x 1625x 1629x 4x 4x 4x 1621x 1629x 3x 3x 3x 3x 3x 3x 1618x 1629x 18x 18x 1600x 1600x 1600x  
/** @import { CallExpression, Expression } from 'estree' */
/** @import { Context } from '../types.js' */
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) {
	const rune = get_rune(node, context.state.scope);
 
	if (rune === '$host') {
		return b.id('undefined');
	}
 
	if (rune === '$effect.tracking') {
		return b.literal(false);
	}
 
	if (rune === '$effect.root') {
		// ignore $effect.root() calls, just return a noop which mimics the cleanup function
		return b.arrow([], b.block([]));
	}
 
	if (rune === '$state.snapshot') {
		return b.call(
			'$.snapshot',
			/** @type {Expression} */ (context.visit(node.arguments[0])),
			is_ignored(node, 'state_snapshot_uncloneable') && b.true
		);
	}
 
	if (rune === '$inspect' || rune === '$inspect().with') {
		return transform_inspect_rune(node, context);
	}
 
	context.next();
}