tsx-dom-ssr
Version:
A simple way to use tsx syntax to do async server-side-rendering.
37 lines (36 loc) • 1.41 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.setAttributes = setAttributes;
const tsx_dom_types_1 = require("tsx-dom-types");
// eslint-disable-next-line @typescript-eslint/no-explicit-any
function transferKnownProperties(source, target) {
for (const key of Object.keys(source)) {
if (key in target)
target[key] = source[key];
}
}
function setAttributes(element, attrs) {
for (const name of Object.keys(attrs)) {
// Ignore some debug props that might be added by bundlers
if (name === "__source" || name === "__self" || name === "tsxTag")
continue;
const value = attrs[name];
if (name === "class") {
const finalValue = (0, tsx_dom_types_1.classnames)(value);
if (finalValue)
element.setAttribute(name, finalValue);
}
else if (name === "style" && typeof value !== "string") {
// Special handler for style with a value of type CSSStyleDeclaration
transferKnownProperties(value, element.style);
}
else if (name === "dangerouslySetInnerHTML")
element.innerHTML = value;
else if (value === true) {
element.setAttribute(name, name);
}
else if (value || value === 0 || value === "") {
element.setAttribute(name, value.toString());
}
}
}