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 4370x 4370x 4370x 4370x 2x 2x 1023x 1023x 1023x 1023x 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);
	}
};