UNPKG

woby

Version:

A high-performance framework with fine-grained observable/signal-based reactivity for building rich applications.

105 lines (104 loc) 3.15 kB
"use strict"; const wrap_clone_element = require("./wrap_clone_element-C4XivH3I.cjs"); const setters = require("./setters-CyO2VUT6.cjs"); const emptyTags = [ "area", "base", "br", "col", "command", "embed", "hr", "img", "input", "keygen", "link", "meta", "param", "source", "track", "wbr" ]; let esc = (str) => String(str).replace(/[&<>"']/g, (s) => `&${map[s]};`); let map = { "&": "amp", "<": "lt", ">": "gt", '"': "quot", "'": "apos" }; let setInnerHTMLAttr = "dangerouslySetInnerHTML"; let DOMAttributeNames = { className: "class", htmlFor: "for" }; let sanitized = {}; function h(name, attrs) { let stack = [], s = ""; attrs = attrs || {}; for (let i = arguments.length; i-- > 2; ) { stack.push(arguments[i]); } if (typeof name === "function") { attrs.children = stack.reverse(); return name(attrs); } if (name) { s += "<" + name; if (attrs) for (let i in attrs) { if (attrs[i] !== false && attrs[i] != null && i !== setInnerHTMLAttr) { s += ` ${DOMAttributeNames[i] ? DOMAttributeNames[i] : esc(i)}="${esc(attrs[i])}"`; } } s += ">"; } if (emptyTags.indexOf(name) === -1) { if (attrs[setInnerHTMLAttr]) { s += attrs[setInnerHTMLAttr].__html; } else while (stack.length) { let child = stack.pop(); if (child) { if (child.pop) { for (let i = child.length; i--; ) stack.push(child[i]); } else { s += sanitized[child] === true ? child : esc(child); } } } s += name ? `</${name}>` : ""; } sanitized[s] = true; return s; } const createHTMLNode = h; const createSVGNode = h; const createElement = (component, _props, ..._children) => { const children = _children.length > 1 ? _children : _children.length > 0 ? _children[0] : void 0; const hasChildren = !setters.isVoidChild(children); if (hasChildren && setters.isObject(_props) && "children" in _props) { throw new Error('Providing "children" both as a prop and as rest arguments is forbidden'); } if (setters.isFunction(component)) { const props = hasChildren ? { ..._props, children } : _props; return wrap_clone_element.wrapElement(() => { return setters.untrack(() => component.call(component, props)); }); } else if (setters.isString(component)) { const isSVG = setters.isSVGElement(component); const createNode = isSVG ? createSVGNode : createHTMLNode; const stack = new Error(); return wrap_clone_element.wrapElement(() => { const p = { children: null }; setters.untrack(() => { if (_props) { setters.setProps(p, _props, stack); } if (hasChildren) { setters.setProps(p, children2, stack); } }); const { children: children2, ...pp } = p; return createNode(component, pp, ...[children2].flat(Infinity)); }); } else if (setters.isNode(component)) { return wrap_clone_element.wrapElement(() => component); } else { throw new Error("Invalid component"); } }; exports.createElement = createElement; //# sourceMappingURL=create_element.ssr-B13vRb_y.cjs.map