UNPKG

svelte

Version:

Cybernetically enhanced web apps

69 lines (61 loc) 1.86 kB
import { set, source } from '../../reactivity/sources.js'; import { get } from '../../runtime.js'; import { is_array } from '../../../shared/utils.js'; /** * Under some circumstances, imports may be reactive in legacy mode. In that case, * they should be using `reactive_import` as part of the transformation * @param {() => any} fn */ export function reactive_import(fn) { var s = source(0); return function () { if (arguments.length === 1) { set(s, get(s) + 1); return arguments[0]; } else { get(s); return fn(); } }; } /** * @this {any} * @param {Record<string, unknown>} $$props * @param {Event} event * @returns {void} */ export function bubble_event($$props, event) { var events = /** @type {Record<string, Function[] | Function>} */ ($$props.$$events)?.[ event.type ]; var callbacks = is_array(events) ? events.slice() : events == null ? [] : [events]; for (var fn of callbacks) { // Preserve "this" context fn.call(this, event); } } /** * Used to simulate `$on` on a component instance when `compatibility.componentApi === 4` * @param {Record<string, any>} $$props * @param {string} event_name * @param {Function} event_callback */ export function add_legacy_event_listener($$props, event_name, event_callback) { $$props.$$events ||= {}; $$props.$$events[event_name] ||= []; $$props.$$events[event_name].push(event_callback); } /** * Used to simulate `$set` on a component instance when `compatibility.componentApi === 4`. * Needs component accessors so that it can call the setter of the prop. Therefore doesn't * work for updating props in `$$props` or `$$restProps`. * @this {Record<string, any>} * @param {Record<string, any>} $$new_props */ export function update_legacy_props($$new_props) { for (var key in $$new_props) { if (key in this) { this[key] = $$new_props[key]; } } }