UNPKG

@kubb/react

Version:

React integration for Kubb, providing JSX runtime support and React component generation capabilities for code generation plugins.

74 lines (55 loc) 1.85 kB
import type { DOMElement, DOMNode, DOMNodeAttribute, ElementNames, TextNode } from './types.ts' export const createNode = (nodeName: string): DOMElement => { const node: DOMElement = { nodeName: nodeName as DOMElement['nodeName'], attributes: {}, childNodes: [], parentNode: undefined, } return node } export const appendChildNode = (node: DOMElement, childNode: DOMElement): void => { if (childNode.parentNode) { removeChildNode(childNode.parentNode, childNode) } childNode.parentNode = node node.childNodes.push(childNode) } export const insertBeforeNode = (node: DOMElement, newChildNode: DOMNode, beforeChildNode: DOMNode): void => { if (newChildNode.parentNode) { removeChildNode(newChildNode.parentNode, newChildNode) } newChildNode.parentNode = node const index = node.childNodes.indexOf(beforeChildNode) if (index >= 0) { node.childNodes.splice(index, 0, newChildNode) return } node.childNodes.push(newChildNode) } export const removeChildNode = (node: DOMElement, removeNode: DOMNode): void => { removeNode.parentNode = undefined const index = node.childNodes.indexOf(removeNode) if (index >= 0) { node.childNodes.splice(index, 1) } } export const setAttribute = (node: DOMElement, key: string, value: DOMNodeAttribute): void => { node.attributes[key] = value } export const createTextNode = (text: string): TextNode => { const node: TextNode = { nodeName: '#text', nodeValue: text, parentNode: undefined, } setTextNodeValue(node, text) return node } export const setTextNodeValue = (node: TextNode, text: string): void => { if (typeof text !== 'string') { text = String(text) } node.nodeValue = text } export const nodeNames: Array<ElementNames> = ['kubb-export', 'kubb-file', 'kubb-source', 'kubb-import', 'kubb-text']