|
import { |
|
custom_event, |
|
append, |
|
append_hydration, |
|
insert, |
|
insert_hydration, |
|
detach, |
|
listen, |
|
attr |
|
} from './dom.js'; |
|
import { SvelteComponent } from './Component.js'; |
|
import { is_void } from '../../shared/utils/names.js'; |
|
import { VERSION } from '../../shared/version.js'; |
|
import { contenteditable_truthy_values } from './utils.js'; |
|
import { ensure_array_like } from './each.js'; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export function dispatch_dev(type, detail) { |
|
document.dispatchEvent(custom_event(type, { version: VERSION, ...detail }, { bubbles: true })); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
export function append_dev(target, node) { |
|
dispatch_dev('SvelteDOMInsert', { target, node }); |
|
append(target, node); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
export function append_hydration_dev(target, node) { |
|
dispatch_dev('SvelteDOMInsert', { target, node }); |
|
append_hydration(target, node); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export function insert_dev(target, node, anchor) { |
|
dispatch_dev('SvelteDOMInsert', { target, node, anchor }); |
|
insert(target, node, anchor); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
export function insert_hydration_dev(target, node, anchor) { |
|
dispatch_dev('SvelteDOMInsert', { target, node, anchor }); |
|
insert_hydration(target, node, anchor); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
export function detach_dev(node) { |
|
dispatch_dev('SvelteDOMRemove', { node }); |
|
detach(node); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
export function detach_between_dev(before, after) { |
|
while (before.nextSibling && before.nextSibling !== after) { |
|
detach_dev(before.nextSibling); |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
export function detach_before_dev(after) { |
|
while (after.previousSibling) { |
|
detach_dev(after.previousSibling); |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
export function detach_after_dev(before) { |
|
while (before.nextSibling) { |
|
detach_dev(before.nextSibling); |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export function listen_dev( |
|
node, |
|
event, |
|
handler, |
|
options, |
|
has_prevent_default, |
|
has_stop_propagation, |
|
has_stop_immediate_propagation |
|
) { |
|
const modifiers = |
|
options === true ? ['capture'] : options ? Array.from(Object.keys(options)) : []; |
|
if (has_prevent_default) modifiers.push('preventDefault'); |
|
if (has_stop_propagation) modifiers.push('stopPropagation'); |
|
if (has_stop_immediate_propagation) modifiers.push('stopImmediatePropagation'); |
|
dispatch_dev('SvelteDOMAddEventListener', { node, event, handler, modifiers }); |
|
const dispose = listen(node, event, handler, options); |
|
return () => { |
|
dispatch_dev('SvelteDOMRemoveEventListener', { node, event, handler, modifiers }); |
|
dispose(); |
|
}; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export function attr_dev(node, attribute, value) { |
|
attr(node, attribute, value); |
|
if (value == null) dispatch_dev('SvelteDOMRemoveAttribute', { node, attribute }); |
|
else dispatch_dev('SvelteDOMSetAttribute', { node, attribute, value }); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export function prop_dev(node, property, value) { |
|
node[property] = value; |
|
dispatch_dev('SvelteDOMSetProperty', { node, property, value }); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export function dataset_dev(node, property, value) { |
|
node.dataset[property] = value; |
|
dispatch_dev('SvelteDOMSetDataset', { node, property, value }); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
export function set_data_dev(text, data) { |
|
data = '' + data; |
|
if (text.data === data) return; |
|
dispatch_dev('SvelteDOMSetData', { node: text, data }); |
|
text.data = (data); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
export function set_data_contenteditable_dev(text, data) { |
|
data = '' + data; |
|
if (text.wholeText === data) return; |
|
dispatch_dev('SvelteDOMSetData', { node: text, data }); |
|
text.data = (data); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export function set_data_maybe_contenteditable_dev(text, data, attr_value) { |
|
if (~contenteditable_truthy_values.indexOf(attr_value)) { |
|
set_data_contenteditable_dev(text, data); |
|
} else { |
|
set_data_dev(text, data); |
|
} |
|
} |
|
|
|
export function ensure_array_like_dev(arg) { |
|
if ( |
|
typeof arg !== 'string' && |
|
!(arg && typeof arg === 'object' && 'length' in arg) && |
|
!(typeof Symbol === 'function' && arg && Symbol.iterator in arg) |
|
) { |
|
throw new Error('{#each} only works with iterable values.'); |
|
} |
|
return ensure_array_like(arg); |
|
} |
|
|
|
|
|
|
|
export function validate_slots(name, slot, keys) { |
|
for (const slot_key of Object.keys(slot)) { |
|
if (!~keys.indexOf(slot_key)) { |
|
console.warn(`<${name}> received an unexpected slot "${slot_key}".`); |
|
} |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
export function validate_dynamic_element(tag) { |
|
const is_string = typeof tag === 'string'; |
|
if (tag && !is_string) { |
|
throw new Error('<svelte:element> expects "this" attribute to be a string.'); |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
export function validate_void_dynamic_element(tag) { |
|
if (tag && is_void(tag)) { |
|
console.warn(`<svelte:element this="${tag}"> is self-closing and cannot have content.`); |
|
} |
|
} |
|
|
|
export function construct_svelte_component_dev(component, props) { |
|
const error_message = 'this={...} of <svelte:component> should specify a Svelte component.'; |
|
try { |
|
const instance = new component(props); |
|
if (!instance.$$ || !instance.$set || !instance.$on || !instance.$destroy) { |
|
throw new Error(error_message); |
|
} |
|
return instance; |
|
} catch (err) { |
|
const { message } = err; |
|
if (typeof message === 'string' && message.indexOf('is not a constructor') !== -1) { |
|
throw new Error(error_message); |
|
} else { |
|
throw err; |
|
} |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export class SvelteComponentDev extends SvelteComponent { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$$prop_def; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$$events_def; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$$slot_def; |
|
|
|
|
|
constructor(options) { |
|
if (!options || (!options.target && !options.$$inline)) { |
|
throw new Error("'target' is a required option"); |
|
} |
|
super(); |
|
} |
|
|
|
|
|
$destroy() { |
|
super.$destroy(); |
|
this.$destroy = () => { |
|
console.warn('Component was already destroyed'); |
|
}; |
|
} |
|
|
|
|
|
$capture_state() {} |
|
|
|
|
|
$inject_state() {} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export class SvelteComponentTyped extends SvelteComponentDev {} |
|
|
|
|
|
export function loop_guard(timeout) { |
|
const start = Date.now(); |
|
return () => { |
|
if (Date.now() - start > timeout) { |
|
throw new Error('Infinite loop detected'); |
|
} |
|
}; |
|
} |
|
|