UNPKG

flexium

Version:

A lightweight, signals-based UI framework with cross-platform renderers

1 lines 5.08 kB
{"version":3,"sources":["../src/server/index.ts"],"names":["VOID_ELEMENTS","renderToString","vnode","escapeHtml","isSignal","result","type","props","children","html","key","value","styleStr","k","v","str"],"mappings":"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","file":"server.mjs","sourcesContent":["import { isSignal } from '../core/signal';\n\nconst VOID_ELEMENTS = new Set([\n 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input',\n 'link', 'meta', 'param', 'source', 'track', 'wbr'\n]);\n\nexport function renderToString(vnode: any): string {\n if (vnode === null || vnode === undefined || vnode === false) {\n return '';\n }\n\n if (typeof vnode === 'string' || typeof vnode === 'number') {\n return escapeHtml(String(vnode));\n }\n\n if (Array.isArray(vnode)) {\n return vnode.map(renderToString).join('');\n }\n\n if (isSignal(vnode)) {\n return renderToString(vnode.value);\n }\n\n if (typeof vnode.type === 'function') {\n const result = vnode.type(vnode.props || {});\n return renderToString(result);\n }\n\n if (typeof vnode.type === 'string') {\n const { type, props, children } = vnode;\n let html = `<${type}`;\n\n if (props) {\n for (const key in props) {\n const value = props[key];\n if (key === 'children' || key.startsWith('on') || value === null || value === undefined || value === false) {\n continue;\n }\n\n if (key === 'className' || key === 'class') {\n html += ` class=\"${escapeHtml(value)}\"`;\n } else if (key === 'style' && typeof value === 'object') {\n const styleStr = Object.entries(value)\n .map(([k, v]) => `${k.replace(/([A-Z])/g, '-$1').toLowerCase()}:${v}`)\n .join(';');\n html += ` style=\"${escapeHtml(styleStr)}\"`;\n } else {\n html += ` ${key}=\"${escapeHtml(String(value))}\"`;\n }\n }\n }\n\n if (VOID_ELEMENTS.has(type)) {\n html += '/>';\n } else {\n html += '>';\n if (children) {\n html += Array.isArray(children)\n ? children.map(renderToString).join('')\n : renderToString(children);\n }\n html += `</${type}>`;\n }\n\n return html;\n }\n\n return '';\n}\n\nfunction escapeHtml(str: string): string {\n return str\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#039;');\n}\n"]}