@@ -40,12 +40,68 @@ func (r *Reader) parseNanoflow(unitID, containerID string, contents []byte) (*mi
4040 nf .Excluded = excluded
4141 }
4242
43- // Parse parameters
44- if params , ok := raw ["Parameters" ].([]any ); ok {
45- for _ , p := range params {
46- if paramMap , ok := p .(map [string ]any ); ok {
47- param := parseMicroflowParameter (paramMap )
48- nf .Parameters = append (nf .Parameters , param )
43+ // Parse parameters (same format variants as microflows)
44+ var paramsArray any
45+ if mpc , ok := raw ["MicroflowParameterCollection" ]; ok {
46+ if mpcMap := extractBsonMap (mpc ); mpcMap != nil {
47+ paramsArray = mpcMap ["Parameters" ]
48+ }
49+ } else {
50+ paramKey := "MicroflowParameters"
51+ if _ , ok := raw [paramKey ]; ! ok {
52+ paramKey = "Parameters"
53+ }
54+ paramsArray = raw [paramKey ]
55+ }
56+ for _ , p := range extractBsonSlice (paramsArray ) {
57+ if paramMap := extractBsonMap (p ); paramMap != nil {
58+ param := parseMicroflowParameter (paramMap )
59+ nf .Parameters = append (nf .Parameters , param )
60+ }
61+ }
62+
63+ // Parse return type (uses same BSON key as microflows)
64+ if rt , ok := raw ["MicroflowReturnType" ].(map [string ]any ); ok {
65+ nf .ReturnType = parseMicroflowDataType (rt )
66+ }
67+
68+ // Parse object collection (activities)
69+ if oc := extractBsonMap (raw ["ObjectCollection" ]); oc != nil {
70+ nf .ObjectCollection = parseMicroflowObjectCollection (oc )
71+ }
72+
73+ // Also extract parameters from ObjectCollection.Objects (modern format)
74+ if len (nf .Parameters ) == 0 {
75+ if ocRaw := extractBsonMap (raw ["ObjectCollection" ]); ocRaw != nil {
76+ for _ , obj := range extractBsonSlice (ocRaw ["Objects" ]) {
77+ if objMap := extractBsonMap (obj ); objMap != nil {
78+ if typeName , _ := objMap ["$Type" ].(string ); typeName == "Microflows$MicroflowParameter" {
79+ param := parseMicroflowParameter (objMap )
80+ nf .Parameters = append (nf .Parameters , param )
81+ }
82+ }
83+ }
84+ }
85+ }
86+
87+ // Parse Flows array (SequenceFlows and AnnotationFlows at root level)
88+ if flowsRaw := raw ["Flows" ]; flowsRaw != nil {
89+ if nf .ObjectCollection == nil {
90+ nf .ObjectCollection = & microflows.MicroflowObjectCollection {}
91+ }
92+ for _ , f := range extractBsonSlice (flowsRaw ) {
93+ if flowMap := extractBsonMap (f ); flowMap != nil {
94+ typeName , _ := flowMap ["$Type" ].(string )
95+ switch typeName {
96+ case "Microflows$AnnotationFlow" :
97+ if af := parseAnnotationFlow (flowMap ); af != nil {
98+ nf .ObjectCollection .AnnotationFlows = append (nf .ObjectCollection .AnnotationFlows , af )
99+ }
100+ default :
101+ if flow := parseSequenceFlow (flowMap ); flow != nil {
102+ nf .ObjectCollection .Flows = append (nf .ObjectCollection .Flows , flow )
103+ }
104+ }
49105 }
50106 }
51107 }
0 commit comments