MCPcopy Create free account
hub / github.com/wavetermdev/waveterm / ConvertElemsToTransferElems

Function ConvertElemsToTransferElems

pkg/vdom/vdom_root.go:534–580  ·  view source on GitHub ↗
(elems []VDomElem)

Source from the content-addressed store, hash-verified

532}
533
534func ConvertElemsToTransferElems(elems []VDomElem) []VDomTransferElem {
535 var transferElems []VDomTransferElem
536 textCounter := 0 // Counter for generating unique IDs for #text nodes
537
538 // Helper function to recursively process each VDomElem in preorder
539 var processElem func(elem VDomElem) string
540 processElem = func(elem VDomElem) string {
541 // Handle #text nodes by generating a unique placeholder ID
542 if elem.Tag == "#text" {
543 textId := fmt.Sprintf("text-%d", textCounter)
544 textCounter++
545 transferElems = append(transferElems, VDomTransferElem{
546 WaveId: textId,
547 Tag: elem.Tag,
548 Text: elem.Text,
549 Props: nil,
550 Children: nil,
551 })
552 return textId
553 }
554
555 // Convert children to WaveId references, handling potential #text nodes
556 childrenIds := make([]string, len(elem.Children))
557 for i, child := range elem.Children {
558 childrenIds[i] = processElem(child) // Children are not roots
559 }
560
561 // Create the VDomTransferElem for the current element
562 transferElem := VDomTransferElem{
563 WaveId: elem.WaveId,
564 Tag: elem.Tag,
565 Props: elem.Props,
566 Children: childrenIds,
567 Text: elem.Text,
568 }
569 transferElems = append(transferElems, transferElem)
570
571 return elem.WaveId
572 }
573
574 // Start processing each top-level element, marking them as roots
575 for _, elem := range elems {
576 processElem(elem)
577 }
578
579 return transferElems
580}
581
582func DedupTransferElems(elems []VDomTransferElem) []VDomTransferElem {
583 seen := make(map[string]int) // maps WaveId to its index in the result slice

Callers 1

CreateTransferElemsMethod · 0.70

Calls

no outgoing calls

Tested by

no test coverage detected