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 4356x 4356x 4356x 4356x 2x 2x 1017x 1017x 1017x 1017x 2x 2x 2x 2x 468x 468x 468x 468x 468x 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 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);
	}
};