import {ChildNodesItemChunk} from "../chunks/types/ChildNodesItemChunk"; import {ChunkType} from "../chunks/types/ChunkType"; import {nodeDeclChunkToNodeName} from "./nodeDeclChunkToNodeName"; import {nodeParamsChunkToParams} from "./nodeParamsChunkToParams"; import {ChildNodeProps} from "./types/ChildNodeProps"; import {getParamNameFromNodeParamChunk} from "./utils/getParamNameFromNodeParamChunk"; import {getParamValueFromNodeParamChunk} from "./utils/getParamValueFromNodeParamChunk"; export function childNodesItemChunkToChildNodeProps( childNodesItemChunk: ChildNodesItemChunk ): ChildNodeProps | null { const { captures: { 1: nodeDeclChunk }, children = [] } = childNodesItemChunk; const nodeName = nodeDeclChunkToNodeName(nodeDeclChunk); if (nodeName) { const params = {} as Record; for (const chunk of children) { switch (chunk.type) { case ChunkType.NodeParam: const paramName = getParamNameFromNodeParamChunk(chunk); params[paramName] = getParamValueFromNodeParamChunk(chunk); break; case ChunkType.NodeParams: Object.assign(params, nodeParamsChunkToParams(chunk)); break; } } return { nodeName, params }; } else { return null; } }