Lint and format src/runtime/internal/dev.js

pull/8569/head
S. Elliott Johnson 3 years ago
parent 4ee5f7a594
commit 6045cb08a1

@ -1,4 +1,13 @@
import { custom_event, append, append_hydration, insert, insert_hydration, detach, listen, attr } from './dom'; import {
custom_event,
append,
append_hydration,
insert,
insert_hydration,
detach,
listen,
attr
} from './dom';
import { SvelteComponent } from './Component'; import { SvelteComponent } from './Component';
import { is_void } from '../../shared/utils/names'; import { is_void } from '../../shared/utils/names';
import { contenteditable_truthy_values } from './utils'; import { contenteditable_truthy_values } from './utils';
@ -7,23 +16,25 @@ import { contenteditable_truthy_values } from './utils';
* @returns {void} * @returns {void}
*/ */
export function dispatch_dev(type, detail) { export function dispatch_dev(type, detail) {
document.dispatchEvent(custom_event(type, { version: '__VERSION__', ...detail }, { bubbles: true })); document.dispatchEvent(
custom_event(type, { version: '__VERSION__', ...detail }, { bubbles: true })
);
} }
/** @param {Node} target /** @param {Node} target
* @param {Node} node * @param {Node} node
* @returns {void} * @returns {void}
*/ */
export function append_dev(target, node) { export function append_dev(target, node) {
dispatch_dev('SvelteDOMInsert', { target, node }); dispatch_dev('SvelteDOMInsert', { target, node });
append(target, node); append(target, node);
} }
/** @param {Node} target /** @param {Node} target
* @param {Node} node * @param {Node} node
* @returns {void} * @returns {void}
*/ */
export function append_hydration_dev(target, node) { export function append_hydration_dev(target, node) {
dispatch_dev('SvelteDOMInsert', { target, node }); dispatch_dev('SvelteDOMInsert', { target, node });
append_hydration(target, node); append_hydration(target, node);
} }
/** @param {Node} target /** @param {Node} target
* @param {Node} node * @param {Node} node
@ -31,8 +42,8 @@ export function append_hydration_dev(target, node) {
* @returns {void} * @returns {void}
*/ */
export function insert_dev(target, node, anchor) { export function insert_dev(target, node, anchor) {
dispatch_dev('SvelteDOMInsert', { target, node, anchor }); dispatch_dev('SvelteDOMInsert', { target, node, anchor });
insert(target, node, anchor); insert(target, node, anchor);
} }
/** @param {Node} target /** @param {Node} target
* @param {Node} node * @param {Node} node
@ -40,40 +51,40 @@ export function insert_dev(target, node, anchor) {
* @returns {void} * @returns {void}
*/ */
export function insert_hydration_dev(target, node, anchor) { export function insert_hydration_dev(target, node, anchor) {
dispatch_dev('SvelteDOMInsert', { target, node, anchor }); dispatch_dev('SvelteDOMInsert', { target, node, anchor });
insert_hydration(target, node, anchor); insert_hydration(target, node, anchor);
} }
/** @param {Node} node /** @param {Node} node
* @returns {void} * @returns {void}
*/ */
export function detach_dev(node) { export function detach_dev(node) {
dispatch_dev('SvelteDOMRemove', { node }); dispatch_dev('SvelteDOMRemove', { node });
detach(node); detach(node);
} }
/** @param {Node} before /** @param {Node} before
* @param {Node} after * @param {Node} after
* @returns {void} * @returns {void}
*/ */
export function detach_between_dev(before, after) { export function detach_between_dev(before, after) {
while (before.nextSibling && before.nextSibling !== after) { while (before.nextSibling && before.nextSibling !== after) {
detach_dev(before.nextSibling); detach_dev(before.nextSibling);
} }
} }
/** @param {Node} after /** @param {Node} after
* @returns {void} * @returns {void}
*/ */
export function detach_before_dev(after) { export function detach_before_dev(after) {
while (after.previousSibling) { while (after.previousSibling) {
detach_dev(after.previousSibling); detach_dev(after.previousSibling);
} }
} }
/** @param {Node} before /** @param {Node} before
* @returns {void} * @returns {void}
*/ */
export function detach_after_dev(before) { export function detach_after_dev(before) {
while (before.nextSibling) { while (before.nextSibling) {
detach_dev(before.nextSibling); detach_dev(before.nextSibling);
} }
} }
/** @param {Node} node /** @param {Node} node
* @param {string} event * @param {string} event
@ -84,20 +95,26 @@ export function detach_after_dev(before) {
* @param {boolean} has_stop_immediate_propagation * @param {boolean} has_stop_immediate_propagation
* @returns {() => void} * @returns {() => void}
*/ */
export function listen_dev(node, event, handler, options, has_prevent_default, has_stop_propagation, has_stop_immediate_propagation) { export function listen_dev(
const modifiers = options === true ? ['capture'] : options ? Array.from(Object.keys(options)) : []; node,
if (has_prevent_default) event,
modifiers.push('preventDefault'); handler,
if (has_stop_propagation) options,
modifiers.push('stopPropagation'); has_prevent_default,
if (has_stop_immediate_propagation) has_stop_propagation,
modifiers.push('stopImmediatePropagation'); has_stop_immediate_propagation
dispatch_dev('SvelteDOMAddEventListener', { node, event, handler, modifiers }); ) {
const dispose = listen(node, event, handler, options); const modifiers =
return () => { options === true ? ['capture'] : options ? Array.from(Object.keys(options)) : [];
dispatch_dev('SvelteDOMRemoveEventListener', { node, event, handler, modifiers }); if (has_prevent_default) modifiers.push('preventDefault');
dispose(); 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();
};
} }
/** @param {Element} node /** @param {Element} node
* @param {string} attribute * @param {string} attribute
@ -105,11 +122,9 @@ export function listen_dev(node, event, handler, options, has_prevent_default, h
* @returns {void} * @returns {void}
*/ */
export function attr_dev(node, attribute, value) { export function attr_dev(node, attribute, value) {
attr(node, attribute, value); attr(node, attribute, value);
if (value == null) if (value == null) dispatch_dev('SvelteDOMRemoveAttribute', { node, attribute });
dispatch_dev('SvelteDOMRemoveAttribute', { node, attribute }); else dispatch_dev('SvelteDOMSetAttribute', { node, attribute, value });
else
dispatch_dev('SvelteDOMSetAttribute', { node, attribute, value });
} }
/** @param {Element} node /** @param {Element} node
* @param {string} property * @param {string} property
@ -117,8 +132,8 @@ export function attr_dev(node, attribute, value) {
* @returns {void} * @returns {void}
*/ */
export function prop_dev(node, property, value) { export function prop_dev(node, property, value) {
node[property] = value; node[property] = value;
dispatch_dev('SvelteDOMSetProperty', { node, property, value }); dispatch_dev('SvelteDOMSetProperty', { node, property, value });
} }
/** @param {HTMLElement} node /** @param {HTMLElement} node
* @param {string} property * @param {string} property
@ -126,30 +141,28 @@ export function prop_dev(node, property, value) {
* @returns {void} * @returns {void}
*/ */
export function dataset_dev(node, property, value) { export function dataset_dev(node, property, value) {
node.dataset[property] = value; node.dataset[property] = value;
dispatch_dev('SvelteDOMSetDataset', { node, property, value }); dispatch_dev('SvelteDOMSetDataset', { node, property, value });
} }
/** @param {Text} text /** @param {Text} text
* @param {unknown} data * @param {unknown} data
* @returns {void} * @returns {void}
*/ */
export function set_data_dev(text, data) { export function set_data_dev(text, data) {
data = '' + data; data = '' + data;
if (text.data === data) if (text.data === data) return;
return; dispatch_dev('SvelteDOMSetData', { node: text, data });
dispatch_dev('SvelteDOMSetData', { node: text, data }); text.data = data;
text.data = data;
} }
/** @param {Text} text /** @param {Text} text
* @param {unknown} data * @param {unknown} data
* @returns {void} * @returns {void}
*/ */
export function set_data_contenteditable_dev(text, data) { export function set_data_contenteditable_dev(text, data) {
data = '' + data; data = '' + data;
if (text.wholeText === data) if (text.wholeText === data) return;
return; dispatch_dev('SvelteDOMSetData', { node: text, data });
dispatch_dev('SvelteDOMSetData', { node: text, data }); text.data = data;
text.data = data;
} }
/** @param {Text} text /** @param {Text} text
* @param {unknown} data * @param {unknown} data
@ -157,67 +170,64 @@ export function set_data_contenteditable_dev(text, data) {
* @returns {void} * @returns {void}
*/ */
export function set_data_maybe_contenteditable_dev(text, data, attr_value) { export function set_data_maybe_contenteditable_dev(text, data, attr_value) {
if (~contenteditable_truthy_values.indexOf(attr_value)) { if (~contenteditable_truthy_values.indexOf(attr_value)) {
set_data_contenteditable_dev(text, data); set_data_contenteditable_dev(text, data);
} } else {
else { set_data_dev(text, data);
set_data_dev(text, data); }
}
} }
/** @returns {void} */ /** @returns {void} */
export function validate_each_argument(arg) { export function validate_each_argument(arg) {
if (typeof arg !== 'string' && !(arg && typeof arg === 'object' && 'length' in arg)) { if (typeof arg !== 'string' && !(arg && typeof arg === 'object' && 'length' in arg)) {
let msg = '{#each} only iterates over array-like objects.'; let msg = '{#each} only iterates over array-like objects.';
if (typeof Symbol === 'function' && arg && Symbol.iterator in arg) { if (typeof Symbol === 'function' && arg && Symbol.iterator in arg) {
msg += ' You can use a spread to convert this iterable into an array.'; msg += ' You can use a spread to convert this iterable into an array.';
} }
throw new Error(msg); throw new Error(msg);
} }
} }
/** @returns {void} */ /** @returns {void} */
export function validate_slots(name, slot, keys) { export function validate_slots(name, slot, keys) {
for (const slot_key of Object.keys(slot)) { for (const slot_key of Object.keys(slot)) {
if (!~keys.indexOf(slot_key)) { if (!~keys.indexOf(slot_key)) {
console.warn(`<${name}> received an unexpected slot "${slot_key}".`); console.warn(`<${name}> received an unexpected slot "${slot_key}".`);
} }
} }
} }
/** @param {unknown} tag /** @param {unknown} tag
* @returns {void} * @returns {void}
*/ */
export function validate_dynamic_element(tag) { export function validate_dynamic_element(tag) {
const is_string = typeof tag === 'string'; const is_string = typeof tag === 'string';
if (tag && !is_string) { if (tag && !is_string) {
throw new Error('<svelte:element> expects "this" attribute to be a string.'); throw new Error('<svelte:element> expects "this" attribute to be a string.');
} }
} }
/** @param {undefined | string} tag /** @param {undefined | string} tag
* @returns {void} * @returns {void}
*/ */
export function validate_void_dynamic_element(tag) { export function validate_void_dynamic_element(tag) {
if (tag && is_void(tag)) { if (tag && is_void(tag)) {
console.warn(`<svelte:element this="${tag}"> is self-closing and cannot have content.`); console.warn(`<svelte:element this="${tag}"> is self-closing and cannot have content.`);
} }
} }
/** @returns {any} */ /** @returns {any} */
export function construct_svelte_component_dev(component, props) { export function construct_svelte_component_dev(component, props) {
const error_message = 'this={...} of <svelte:component> should specify a Svelte component.'; const error_message = 'this={...} of <svelte:component> should specify a Svelte component.';
try { try {
const instance = new component(props); const instance = new component(props);
if (!instance.$$ || !instance.$set || !instance.$on || !instance.$destroy) { if (!instance.$$ || !instance.$set || !instance.$on || !instance.$destroy) {
throw new Error(error_message); throw new Error(error_message);
} }
return instance; return instance;
} } catch (err) {
catch (err) { const { message } = err;
const { message } = err; if (typeof message === 'string' && message.indexOf('is not a constructor') !== -1) {
if (typeof message === 'string' && message.indexOf('is not a constructor') !== -1) { throw new Error(error_message);
throw new Error(error_message); } else {
} throw err;
else { }
throw err; }
}
}
} }
/** /**
* Base class for Svelte components with some minor dev-enhancements. Used when dev=true. * Base class for Svelte components with some minor dev-enhancements. Used when dev=true.
@ -245,62 +255,60 @@ export function construct_svelte_component_dev(component, props) {
* @extends SvelteComponent * @extends SvelteComponent
*/ */
export class SvelteComponentDev extends SvelteComponent { export class SvelteComponentDev extends SvelteComponent {
/** /**
* @private * @private
* For type checking capabilities only. * For type checking capabilities only.
* Does not exist at runtime. * Does not exist at runtime.
* ### DO NOT USE! * ### DO NOT USE!
*/ */
$$prop_def = undefined; $$prop_def = undefined;
/** /**
* @private * @private
* For type checking capabilities only. * For type checking capabilities only.
* Does not exist at runtime. * Does not exist at runtime.
* ### DO NOT USE! * ### DO NOT USE!
*/ */
$$events_def = undefined; $$events_def = undefined;
/** /**
* @private * @private
* For type checking capabilities only. * For type checking capabilities only.
* Does not exist at runtime. * Does not exist at runtime.
* ### DO NOT USE! * ### DO NOT USE!
*/ */
$$slot_def = undefined; $$slot_def = undefined;
constructor(options) { constructor(options) {
if (!options || (!options.target && !options.$$inline)) { if (!options || (!options.target && !options.$$inline)) {
throw new Error("'target' is a required option"); throw new Error("'target' is a required option");
} }
super(); super();
} }
/** @returns {void} */ /** @returns {void} */
$destroy() { $destroy() {
super.$destroy(); super.$destroy();
this.$destroy = () => { this.$destroy = () => {
console.warn('Component was already destroyed'); // eslint-disable-line no-console console.warn('Component was already destroyed'); // eslint-disable-line no-console
}; };
} }
/** @returns {void} */ /** @returns {void} */
$capture_state() { } $capture_state() {}
/** @returns {void} */ /** @returns {void} */
$inject_state() { } $inject_state() {}
} }
/** /**
* @deprecated Use `SvelteComponent` instead. See PR for more information: https://github.com/sveltejs/svelte/pull/8512 * @deprecated Use `SvelteComponent` instead. See PR for more information: https://github.com/sveltejs/svelte/pull/8512
* @extends SvelteComponentDev<Props, Events, Slots> * @extends SvelteComponentDev<Props, Events, Slots>
*/ */
export class SvelteComponentTyped extends SvelteComponentDev { export class SvelteComponentTyped extends SvelteComponentDev {}
}
/** @returns {() => void} */ /** @returns {() => void} */
export function loop_guard(timeout) { export function loop_guard(timeout) {
const start = Date.now(); const start = Date.now();
return () => { return () => {
if (Date.now() - start > timeout) { if (Date.now() - start > timeout) {
throw new Error('Infinite loop detected'); throw new Error('Infinite loop detected');
} }
}; };
} }
/** /**
* @typedef {Class<HTMLElement>} ComponentType * @typedef {Class<HTMLElement>} ComponentType
* @template {SvelteComponentDev} [Component=SvelteComponentDev] * @template {SvelteComponentDev} [Component=SvelteComponentDev]
@ -322,6 +330,6 @@ export function loop_guard(timeout) {
* @property {Map<any,any>} [context] * @property {Map<any,any>} [context]
* @property {boolean} [hydrate] * @property {boolean} [hydrate]
* @property {boolean} [intro] * @property {boolean} [intro]
* @property {boolean} [$$inline] * @property {boolean} [$$inline]
*/ */
/** @typedef {Object} SvelteComponentTyped */ /** @typedef {Object} SvelteComponentTyped */

Loading…
Cancel
Save