MCPcopy
hub / github.com/wavetermdev/waveterm / generateTSTypeInternal

Function generateTSTypeInternal

pkg/tsgen/tsgen.go:184–256  ·  view source on GitHub ↗
(rtype reflect.Type, tsTypesMap map[reflect.Type]string, embedded bool)

Source from the content-addressed store, hash-verified

182}
183
184func generateTSTypeInternal(rtype reflect.Type, tsTypesMap map[reflect.Type]string, embedded bool) (string, []reflect.Type) {
185 var buf bytes.Buffer
186 tsTypeName := rtype.Name()
187 if tsRename, ok := tsRenameMap[tsTypeName]; ok {
188 tsTypeName = tsRename
189 }
190 var isWaveObj bool
191 if !embedded {
192 if rtype.Implements(waveObjRType) || reflect.PointerTo(rtype).Implements(waveObjRType) {
193 isWaveObj = true
194 }
195 }
196 var fieldsBuf bytes.Buffer
197 var subTypes []reflect.Type
198 for i := 0; i < rtype.NumField(); i++ {
199 field := rtype.Field(i)
200 if field.PkgPath != "" {
201 continue
202 }
203 if field.Anonymous {
204 embeddedBuf, embeddedTypes := generateTSTypeInternal(field.Type, tsTypesMap, true)
205 fieldsBuf.WriteString(embeddedBuf)
206 subTypes = append(subTypes, embeddedTypes...)
207 continue
208 }
209 fieldName := getTSFieldName(field)
210 if fieldName == "" {
211 continue
212 }
213 if isWaveObj && (fieldName == waveobj.OTypeKeyName || fieldName == waveobj.OIDKeyName || fieldName == waveobj.VersionKeyName || fieldName == waveobj.MetaKeyName) {
214 continue
215 }
216 optMarker := ""
217 if isFieldOmitEmpty(field) {
218 optMarker = "?"
219 }
220 tsTypeTag := field.Tag.Get("tstype")
221 if tsTypeTag != "" {
222 if tsTypeTag == "-" {
223 continue
224 }
225 fieldsBuf.WriteString(fmt.Sprintf(" %s%s: %s;\n", fieldName, optMarker, tsTypeTag))
226 continue
227 }
228 tsType, fieldSubTypes := TypeToTSType(field.Type, tsTypesMap)
229 if tsType == "" {
230 continue
231 }
232 subTypes = append(subTypes, fieldSubTypes...)
233 if tsType == "UIContext" {
234 optMarker = "?"
235 }
236 fieldsBuf.WriteString(fmt.Sprintf(" %s%s: %s;\n", fieldName, optMarker, tsType))
237 }
238 if !embedded {
239 buf.WriteString(fmt.Sprintf("// %s\n", rtype.String()))
240 if fieldsBuf.Len() == 0 && !isWaveObj {
241 // empty struct - use "object" instead of "{}" to satisfy linter

Callers 1

GenerateTSTypeFunction · 0.85

Calls 10

getTSFieldNameFunction · 0.85
isFieldOmitEmptyFunction · 0.85
TypeToTSTypeFunction · 0.85
WriteStringMethod · 0.80
LenMethod · 0.80
BytesMethod · 0.80
WriteMethod · 0.65
NameMethod · 0.45
GetMethod · 0.45
StringMethod · 0.45

Tested by

no test coverage detected