@@ -10,6 +10,7 @@ import type {
10
10
EdgeMarkerType ,
11
11
ElementData ,
12
12
Elements ,
13
+ FlowElements ,
13
14
GraphEdge ,
14
15
GraphNode ,
15
16
MaybeElement ,
@@ -127,15 +128,21 @@ export function parseEdge(edge: Edge, defaults: Partial<GraphEdge> = {}): GraphE
127
128
return Object . assign ( { id : edge . id . toString ( ) } , edge , defaults ) as GraphEdge
128
129
}
129
130
130
- const getConnectedElements = ( node : GraphNode , elements : Elements , dir : 'source' | 'target' ) => {
131
+ const getConnectedElements = < T extends Elements = FlowElements > (
132
+ node : Node ,
133
+ elements : T ,
134
+ dir : 'source' | 'target' ,
135
+ ) : T extends FlowElements ? GraphNode [ ] : Node [ ] => {
131
136
if ( ! isNode ( node ) ) return [ ]
132
137
const origin = dir === 'source' ? 'target' : 'source'
133
138
const ids = elements . filter ( ( e ) => isEdge ( e ) && e [ origin ] === node . id ) . map ( ( e ) => isEdge ( e ) && e [ dir ] )
134
- return elements . filter ( ( e ) => ids . includes ( e . id ) ) as GraphEdge [ ]
139
+ return elements . filter ( ( e ) => ids . includes ( e . id ) ) as T extends FlowElements ? GraphNode [ ] : Node [ ]
135
140
}
136
- export const getOutgoers = ( node : GraphNode , elements : Elements ) => getConnectedElements ( node , elements , 'target' )
141
+ export const getOutgoers = < T extends Elements = FlowElements > ( node : Node , elements : T ) =>
142
+ getConnectedElements ( node , elements , 'target' )
137
143
138
- export const getIncomers = ( node : GraphNode , elements : Elements ) => getConnectedElements ( node , elements , 'source' )
144
+ export const getIncomers = < T extends Elements = FlowElements > ( node : Node , elements : T ) =>
145
+ getConnectedElements ( node , elements , 'source' )
139
146
140
147
export const getEdgeId = ( { source, sourceHandle, target, targetHandle } : Connection ) =>
141
148
`vueflow__edge-${ source } ${ sourceHandle ?? '' } -${ target } ${ targetHandle ?? '' } `
0 commit comments