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

100% Statements 35/35
100% Branches 7/7
100% Functions 1/1
100% Lines 34/34

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 352x 2x 2x 2x 2x 2x 2x 2x 2x 1300x 1300x 1300x 1300x 1300x 168x 168x 168x 168x 1300x 1132x 1132x 1300x 1300x 181x 181x 181x 181x 181x 181x 181x 181x 1119x 1119x 1119x  
/** @import { ArrowFunctionExpression, FunctionExpression, Node } from 'estree' */
/** @import { ComponentContext } from '../../types' */
import { build_hoisted_params } from '../../utils.js';
 
/**
 * @param {ArrowFunctionExpression | FunctionExpression} node
 * @param {ComponentContext} context
 */
export const visit_function = (node, context) => {
	const metadata = node.metadata;
 
	let state = context.state;
 
	if (node.type === 'FunctionExpression') {
		const parent = /** @type {Node} */ (context.path.at(-1));
		const in_constructor = parent.type === 'MethodDefinition' && parent.kind === 'constructor';
 
		state = { ...context.state, in_constructor };
	} else {
		state = { ...context.state, in_constructor: false };
	}
 
	if (metadata?.hoisted === true) {
		const params = build_hoisted_params(node, context);
 
		return /** @type {FunctionExpression} */ ({
			...node,
			params,
			body: context.visit(node.body, state)
		});
	}
 
	context.next(state);
};