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 1316x 1316x 1316x 1316x 1316x 168x 168x 168x 168x 1316x 1148x 1148x 1316x 1316x 181x 181x 181x 181x 181x 181x 181x 181x 1135x 1135x 1135x  
/** @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);
};