/** * @param {String} name * @return {String} */ const snakeToHTML = name => name.replace(/([A-Z])/g, "-$1").replace(/^-/, "").toLowerCase() // @ts-ignore export default new Proxy(/** @type {ObjectHTMLElement>} */(document), { /** @param {string} tag */ get: (_, tag) => /** @param {any[]} args */ (...args) => { let node = document.createElement(snakeToHTML(tag)) for (const arg of args) { if (arg instanceof HTMLElement) { node.append(arg) } else if (arg instanceof Object) { for (let key in arg) { node[key] = arg[key] } } } return node } })