@tko/utils.jsx
Version:
TKO JSX Rendering
39 lines (38 loc) • 856 B
JavaScript
// @tko/utils.jsx 🥊 4.0.0-beta1.3 ESM
import {
isObservable,
unwrap
} from "@tko/observable";
import {
ORIGINAL_JSX_SYM
} from "./JsxObserver";
export function maybeJsx(possibleJsx) {
if (isObservable(possibleJsx)) {
return true;
}
const value = unwrap(possibleJsx);
if (!value) {
return false;
}
if (value.elementName) {
return true;
}
if (!Array.isArray(value) || !value.length) {
return false;
}
if (value[0] instanceof window.Node) {
return false;
}
return true;
}
export function getOriginalJsxForNode(node) {
return node[ORIGINAL_JSX_SYM];
}
export function createElement(elementName, attributes, ...children) {
return elementName === Fragment ? children : {
elementName,
attributes: attributes || {},
children: [...children]
};
}
export const Fragment = Symbol("JSX Fragment");