Search based on property values

Not sure if this is achievable, but it would be very handy if I could perform a node search in the UI based on the values of specific properties of nodes. It's fine if a value has a fairly unique string, but (to use a dumb example) if I want all change nodes setting my_property to true, the best I can do is search for "my_property" and I'll get all the false ones (plus just references to the property). It's obviously complicated by the fact that properties might be set by JSONata (etc.) but even treating it as text using regex would be helpful.

To do this it would be helpful if you could see what is stored for each node without having to open the flow in a text editor. Otherwise, for example, you wouldn't know how to search for "extend delay if new message arrives" in the trigger node.

My current use case is I have a subflow that is referenced 210 times, and I want to find the ones where the environment variable called "debug" is set to true.

While, in theory, it would be possible to create a full-text index of node data. But it wouldn't be easy. You would need to deal, for example, with the difference between the internal setting property names and their visual labels.

But, the example you have given is actually different and probably quite a bit simpler. Since environment variables can only be set in certain places. Still wouldn't be that easy though. The use of typed inputs does make things a lot more complex, though because there is no option for using a msg property, it would be likely that the JSONata variables would be the only complex one.

I can certainly see the need. But unless someone steps up to do some coding, I'm not sure that it will get much traction. Still, one of the core devs might be interested.

So you want to do a search like: has:property debug=true?

I can add it once the format is validated by the team.

That would be great, although in some cases, like with environment variables, the property value is indirect - rather than debug=true, it's...

"name":"debug","value":"true"

To get what I need in the short-term, I converted the nodes I was interested in to CSV using the following fairly crappy-but-functional JSONata:

(
    $c := ", ";
    $head := "id, node, type, property, format, value";

    $change :=
        payload[type='change'].(
            $prefix := id & $c & type & $c;
            rules.(
                $prefix & t & $c & p & $c & tot & $c & $replace(to, ',', ';')
            )
        );
    $function :=
        payload[type='function'].(
            id & $c & type & $c & $c & $c & $c & $replace($replace(func, ',', ';'), '\n', ' ')
        );
    $inject :=
        payload[type='inject'].(
            $prefix := id & $c & type & $c;
            props.(
                $prefix & $c & p & $c & vt & $c & $replace(v, ',', ';')
            )
        );
    $subflow :=
        payload[$contains(type, 'subflow')].(
            $prefix := id & $c & 'subflow' & $c & $substringAfter(type, 'subflow:') & $c;
            env.(
                $prefix & $c & name & $c & type & $c & $replace(value, ',', ';')
            )
        );
    $switch :=
        payload[type='switch'].(
            $prefix := id & $c & type & $c & $c & propertyType & ':' & $replace(property, ',', ';');
            rules.(
                $prefix & $c & t & $c & (vt ? vt & ':' : '') & $replace(v, ',', ';')
            )
        );
    
    [$head]
    ~> $append($change)
    ~> $append($function)
    ~> $append($inject)
    ~> $append($subflow)
    ~> $append($switch)
    ~> $join('\n')
)

If nothing else it highlights how different nodes store properties in different ways, and you would struggle to cope with custom nodes.