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

100% Statements 42/42
88.88% Branches 8/9
100% Functions 3/3
100% Lines 40/40

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 412x 2x 2x 2x 2x 2x 4358x 4358x 4358x 4358x 2x 2x 1020x 1020x 1020x 1020x 2x 2x 2x 2x 469x 469x 469x 469x 469x 18x 18x 18x 18x 18x 18x 18x 18x 18x 18x 18x 18x 451x 451x 2x  
import * as b from '../../../../utils/builders.js';
import { function_visitor, serialize_hoistable_params } from '../utils.js';
 
/** @type {import('../types.js').ComponentVisitors} */
export const javascript_visitors = {
	Program(node, { visit }) {
		return /** @type {import('estree').Program} */ ({
			...node,
			body: node.body.map((node) => /** @type {import('estree').Node} */ (visit(node)))
		});
	},
	BlockStatement(node, { visit }) {
		return /** @type {import('estree').BlockStatement} */ ({
			...node,
			body: node.body.map((node) => /** @type {import('estree').Node} */ (visit(node)))
		});
	},
	FunctionExpression: function_visitor,
	ArrowFunctionExpression: function_visitor,
	FunctionDeclaration(node, context) {
		const metadata = node.metadata;
 
		const state = { ...context.state, in_constructor: false };
 
		if (metadata?.hoistable === true) {
			const params = serialize_hoistable_params(node, context);
 
			context.state.hoisted.push(
				/** @type {import('estree').FunctionDeclaration} */ ({
					...node,
					id: node.id !== null ? context.visit(node.id, state) : null,
					params,
					body: context.visit(node.body, state)
				})
			);
			return b.empty;
		}
		context.next(state);
	}
};