1
- import { toEdgeID , toNodeID , toPortID } from '../utils'
2
1
import {
3
- type AdjacencyListColumnKey ,
4
- type AdjacencyListKey ,
5
- type EdgeId ,
2
+ toEdgeID ,
3
+ toNodeID ,
4
+ toPortID ,
6
5
type LineageEdge ,
7
6
type LineageEdgeData ,
7
+ type EdgeId ,
8
8
type NodeId ,
9
9
type PortId ,
10
10
type TransformEdgeFn ,
@@ -17,28 +17,34 @@ import {
17
17
18
18
export const MAX_COLUMNS_TO_DISPLAY = 5
19
19
20
- export function getAdjacencyListKeysFromColumnLineage (
21
- columnLineage : ColumnLevelLineageAdjacencyList ,
20
+ export function getAdjacencyListKeysFromColumnLineage <
21
+ TAdjacencyListKey extends string ,
22
+ TAdjacencyListColumnKey extends string ,
23
+ > (
24
+ columnLineage : ColumnLevelLineageAdjacencyList <
25
+ TAdjacencyListKey ,
26
+ TAdjacencyListColumnKey
27
+ > ,
22
28
) {
23
- const adjacencyListKeys = new Set < AdjacencyListKey > ( )
29
+ const adjacencyListKeys = new Set < TAdjacencyListKey > ( )
24
30
25
31
const targets = Object . entries ( columnLineage ) as [
26
- AdjacencyListKey ,
27
- ColumnLevelConnections ,
32
+ TAdjacencyListKey ,
33
+ ColumnLevelConnections < TAdjacencyListKey , TAdjacencyListColumnKey > ,
28
34
] [ ]
29
35
30
36
for ( const [ sourceModelName , targetColumns ] of targets ) {
31
37
adjacencyListKeys . add ( sourceModelName )
32
38
33
39
const targetConnections = Object . entries ( targetColumns ) as [
34
- AdjacencyListColumnKey ,
35
- ColumnLevelDetails ,
40
+ TAdjacencyListColumnKey ,
41
+ ColumnLevelDetails < TAdjacencyListKey , TAdjacencyListColumnKey > ,
36
42
] [ ]
37
43
38
44
for ( const [ , { models : sourceModels } ] of targetConnections ) {
39
45
for ( const targetModelName of Object . keys (
40
46
sourceModels ,
41
- ) as AdjacencyListKey [ ] ) {
47
+ ) as TAdjacencyListKey [ ] ) {
42
48
adjacencyListKeys . add ( targetModelName )
43
49
}
44
50
}
@@ -48,55 +54,69 @@ export function getAdjacencyListKeysFromColumnLineage(
48
54
}
49
55
50
56
export function getEdgesFromColumnLineage <
57
+ TAdjacencyListKey extends string ,
58
+ TAdjacencyListColumnKey extends string ,
51
59
TEdgeData extends LineageEdgeData = LineageEdgeData ,
60
+ TEdgeID extends string = EdgeId ,
61
+ TNodeID extends string = NodeId ,
62
+ TPortID extends string = PortId ,
52
63
> ( {
53
- columnLineage = { } ,
64
+ columnLineage,
54
65
transformEdge,
55
66
} : {
56
- columnLineage : ColumnLevelLineageAdjacencyList
57
- transformEdge : TransformEdgeFn < TEdgeData >
67
+ columnLineage : ColumnLevelLineageAdjacencyList <
68
+ TAdjacencyListKey ,
69
+ TAdjacencyListColumnKey
70
+ >
71
+ transformEdge : TransformEdgeFn < TEdgeData , TNodeID , TEdgeID , TPortID >
58
72
} ) {
59
- const edges : LineageEdge < TEdgeData > [ ] = [ ]
60
- const modelLevelEdgeIDs = new Map < EdgeId , [ NodeId , NodeId ] > ( )
73
+ const edges : LineageEdge < TEdgeData , TNodeID , TEdgeID , TPortID > [ ] = [ ]
74
+ const modelLevelEdgeIDs = new Map < TEdgeID , [ TNodeID , TNodeID ] > ( )
61
75
const targets = Object . entries ( columnLineage || { } ) as [
62
- AdjacencyListKey ,
63
- ColumnLevelConnections ,
76
+ TAdjacencyListKey ,
77
+ ColumnLevelConnections < TAdjacencyListKey , TAdjacencyListColumnKey > ,
64
78
] [ ]
65
79
66
80
for ( const [ targetModelName , targetColumns ] of targets ) {
67
81
const targetConnections = Object . entries ( targetColumns ) as [
68
- AdjacencyListColumnKey ,
69
- ColumnLevelDetails ,
82
+ TAdjacencyListColumnKey ,
83
+ ColumnLevelDetails < TAdjacencyListKey , TAdjacencyListColumnKey > ,
70
84
] [ ]
71
85
72
- const targetNodeId = toNodeID ( targetModelName )
86
+ const targetNodeId = toNodeID < TNodeID > ( targetModelName )
73
87
74
88
for ( const [
75
89
targetColumnName ,
76
90
{ models : sourceModels } ,
77
91
] of targetConnections ) {
78
92
const sources = Object . entries ( sourceModels ) as [
79
- AdjacencyListKey ,
80
- AdjacencyListKey [ ] ,
93
+ TAdjacencyListKey ,
94
+ TAdjacencyListColumnKey [ ] ,
81
95
] [ ]
82
96
83
97
for ( const [ sourceModelName , sourceColumns ] of sources ) {
84
- const sourceNodeId = toNodeID ( sourceModelName )
98
+ const sourceNodeId = toNodeID < TNodeID > ( sourceModelName )
85
99
86
- modelLevelEdgeIDs . set ( toEdgeID ( sourceModelName , targetModelName ) , [
87
- sourceNodeId ,
88
- targetNodeId ,
89
- ] )
100
+ modelLevelEdgeIDs . set (
101
+ toEdgeID < TEdgeID > ( sourceModelName , targetModelName ) ,
102
+ [ sourceNodeId , targetNodeId ] ,
103
+ )
90
104
91
105
sourceColumns . forEach ( sourceColumnName => {
92
- const edgeId = toEdgeID (
106
+ const edgeId = toEdgeID < TEdgeID > (
107
+ sourceModelName ,
108
+ sourceColumnName ,
109
+ targetModelName ,
110
+ targetColumnName ,
111
+ )
112
+ const sourceColumnId = toPortID < TPortID > (
93
113
sourceModelName ,
94
114
sourceColumnName ,
115
+ )
116
+ const targetColumnId = toPortID < TPortID > (
95
117
targetModelName ,
96
118
targetColumnName ,
97
119
)
98
- const sourceColumnId = toPortID ( sourceModelName , sourceColumnName )
99
- const targetColumnId = toPortID ( targetModelName , targetColumnName )
100
120
101
121
edges . push (
102
122
transformEdge (
@@ -121,19 +141,26 @@ export function getEdgesFromColumnLineage<
121
141
return edges
122
142
}
123
143
124
- export function getConnectedColumnsIDs (
125
- adjacencyList : ColumnLevelLineageAdjacencyList ,
144
+ export function getConnectedColumnsIDs <
145
+ TAdjacencyListKey extends string ,
146
+ TAdjacencyListColumnKey extends string ,
147
+ TColumnID extends string = PortId ,
148
+ > (
149
+ adjacencyList : ColumnLevelLineageAdjacencyList <
150
+ TAdjacencyListKey ,
151
+ TAdjacencyListColumnKey
152
+ > ,
126
153
) {
127
- const connectedColumns = new Set < PortId > ( )
154
+ const connectedColumns = new Set < TColumnID > ( )
128
155
const targets = Object . entries ( adjacencyList ) as [
129
- AdjacencyListKey ,
130
- ColumnLevelConnections ,
156
+ TAdjacencyListKey ,
157
+ ColumnLevelConnections < TAdjacencyListKey , TAdjacencyListColumnKey > ,
131
158
] [ ]
132
159
133
160
for ( const [ sourceModelName , targetColumns ] of targets ) {
134
161
const targetConnections = Object . entries ( targetColumns ) as [
135
- AdjacencyListColumnKey ,
136
- ColumnLevelDetails ,
162
+ TAdjacencyListColumnKey ,
163
+ ColumnLevelDetails < TAdjacencyListKey , TAdjacencyListColumnKey > ,
137
164
] [ ]
138
165
139
166
for ( const [
@@ -143,8 +170,8 @@ export function getConnectedColumnsIDs(
143
170
connectedColumns . add ( toPortID ( sourceModelName , sourceColumnName ) )
144
171
145
172
const sources = Object . entries ( sourceModels ) as [
146
- AdjacencyListKey ,
147
- AdjacencyListKey [ ] ,
173
+ TAdjacencyListKey ,
174
+ TAdjacencyListColumnKey [ ] ,
148
175
] [ ]
149
176
150
177
for ( const [ targetModelName , sourceColumns ] of sources ) {
0 commit comments