HEX
Server: nginx/1.18.0
System: Linux test-ipsremont 5.4.0-214-generic #234-Ubuntu SMP Fri Mar 14 23:50:27 UTC 2025 x86_64
User: ips (1000)
PHP: 8.0.30
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/quadcode.com/node_modules/svelte/src/compiler/compile/nodes/Let.js
import Node from './shared/Node.js';
import { walk } from 'estree-walker';
import compiler_errors from '../compiler_errors.js';

const applicable = new Set(['Identifier', 'ObjectExpression', 'ArrayExpression', 'Property']);

/** @extends Node<'Let'> */
export default class Let extends Node {
	/** @type {import('estree').Identifier} */
	name;

	/** @type {import('estree').Identifier} */
	value;

	/** @type {string[]} */
	names = [];

	/**
	 * @param {import('../Component.js').default} component
	 * @param {import('./shared/Node.js').default} parent
	 * @param {import('./shared/TemplateScope.js').default} scope
	 * @param {import('../../interfaces.js').TemplateNode} info
	 */
	constructor(component, parent, scope, info) {
		super(component, parent, scope, info);
		this.name = { type: 'Identifier', name: info.name };
		const { names } = this;
		if (info.expression) {
			this.value = info.expression;
			walk(info.expression, {
				/** @param {import('estree').Identifier | import('estree').BasePattern} node */
				enter(node) {
					if (!applicable.has(node.type)) {
						return component.error(/** @type {any} */ (node), compiler_errors.invalid_let);
					}
					if (node.type === 'Identifier') {
						names.push(/** @type {import('estree').Identifier} */ (node).name);
					}
					// slightly unfortunate hack
					if (node.type === 'ArrayExpression') {
						node.type = 'ArrayPattern';
					}
					if (node.type === 'ObjectExpression') {
						node.type = 'ObjectPattern';
					}
				}
			});
		} else {
			names.push(this.name.name);
		}
	}
}