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 4444x 4444x 4444x 4444x 2x 2x 1048x 1048x 1048x 1048x 2x 2x 2x 2x 478x 478x 478x 478x 478x 19x 19x 19x 19x 19x 19x 19x 19x 19x 19x 19x 19x 459x 459x 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);
	}
};