UNPKG

atomico

Version:

Atomico is a small library for the creation of interfaces based on web-components, only using functions and hooks.

54 lines (46 loc) 1.54 kB
import { ELEMENT_TRUE_VALUES } from "../constants"; export function setAttr(node, attr, value) { if (value == null) { node.removeAttribute(attr); } else { node.setAttribute( attr, typeof value == "object" ? JSON.stringify(value) : value ); } } export function formatType(value, type = String) { try { if (type == Boolean) { value = ELEMENT_TRUE_VALUES.includes(value); } else if (typeof value == "string") { value = type == Number ? Number(value) : type == Object || type == Array ? JSON.parse(value) : value; } if ({}.toString.call(value) == `[object ${type.name}]`) { return { value, error: type == Number && Number.isNaN(value) }; } } catch (e) {} return { value, error: true }; } export function propToAttr(prop) { return prop.replace(/([A-Z])/g, "-$1").toLowerCase(); } export function attrToProp(attr) { return attr.replace(/-(\w)/g, (all, letter) => letter.toUpperCase()); } export function dispatchEvent(node, type, customEventInit) { node.dispatchEvent( new CustomEvent( type, typeof customEventInit == "object" ? customEventInit : null ) ); } export function createPropError(status, message) { return Object.assign(new Error("Failed prop\n" + message), status); }