1- import { toEdgeID , toNodeID , toPortID } from '../utils'
21import {
3- type AdjacencyListColumnKey ,
4- type AdjacencyListKey ,
5- type EdgeId ,
2+ toEdgeID ,
3+ toNodeID ,
4+ toPortID ,
65 type LineageEdge ,
76 type LineageEdgeData ,
7+ type EdgeId ,
88 type NodeId ,
99 type PortId ,
1010 type TransformEdgeFn ,
@@ -17,28 +17,34 @@ import {
1717
1818export const MAX_COLUMNS_TO_DISPLAY = 5
1919
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+ > ,
2228) {
23- const adjacencyListKeys = new Set < AdjacencyListKey > ( )
29+ const adjacencyListKeys = new Set < TAdjacencyListKey > ( )
2430
2531 const targets = Object . entries ( columnLineage ) as [
26- AdjacencyListKey ,
27- ColumnLevelConnections ,
32+ TAdjacencyListKey ,
33+ ColumnLevelConnections < TAdjacencyListKey , TAdjacencyListColumnKey > ,
2834 ] [ ]
2935
3036 for ( const [ sourceModelName , targetColumns ] of targets ) {
3137 adjacencyListKeys . add ( sourceModelName )
3238
3339 const targetConnections = Object . entries ( targetColumns ) as [
34- AdjacencyListColumnKey ,
35- ColumnLevelDetails ,
40+ TAdjacencyListColumnKey ,
41+ ColumnLevelDetails < TAdjacencyListKey , TAdjacencyListColumnKey > ,
3642 ] [ ]
3743
3844 for ( const [ , { models : sourceModels } ] of targetConnections ) {
3945 for ( const targetModelName of Object . keys (
4046 sourceModels ,
41- ) as AdjacencyListKey [ ] ) {
47+ ) as TAdjacencyListKey [ ] ) {
4248 adjacencyListKeys . add ( targetModelName )
4349 }
4450 }
@@ -48,55 +54,69 @@ export function getAdjacencyListKeysFromColumnLineage(
4854}
4955
5056export function getEdgesFromColumnLineage <
57+ TAdjacencyListKey extends string ,
58+ TAdjacencyListColumnKey extends string ,
5159 TEdgeData extends LineageEdgeData = LineageEdgeData ,
60+ TEdgeID extends string = EdgeId ,
61+ TNodeID extends string = NodeId ,
62+ TPortID extends string = PortId ,
5263> ( {
53- columnLineage = { } ,
64+ columnLineage,
5465 transformEdge,
5566} : {
56- columnLineage : ColumnLevelLineageAdjacencyList
57- transformEdge : TransformEdgeFn < TEdgeData >
67+ columnLineage : ColumnLevelLineageAdjacencyList <
68+ TAdjacencyListKey ,
69+ TAdjacencyListColumnKey
70+ >
71+ transformEdge : TransformEdgeFn < TEdgeData , TNodeID , TEdgeID , TPortID >
5872} ) {
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 ] > ( )
6175 const targets = Object . entries ( columnLineage || { } ) as [
62- AdjacencyListKey ,
63- ColumnLevelConnections ,
76+ TAdjacencyListKey ,
77+ ColumnLevelConnections < TAdjacencyListKey , TAdjacencyListColumnKey > ,
6478 ] [ ]
6579
6680 for ( const [ targetModelName , targetColumns ] of targets ) {
6781 const targetConnections = Object . entries ( targetColumns ) as [
68- AdjacencyListColumnKey ,
69- ColumnLevelDetails ,
82+ TAdjacencyListColumnKey ,
83+ ColumnLevelDetails < TAdjacencyListKey , TAdjacencyListColumnKey > ,
7084 ] [ ]
7185
72- const targetNodeId = toNodeID ( targetModelName )
86+ const targetNodeId = toNodeID < TNodeID > ( targetModelName )
7387
7488 for ( const [
7589 targetColumnName ,
7690 { models : sourceModels } ,
7791 ] of targetConnections ) {
7892 const sources = Object . entries ( sourceModels ) as [
79- AdjacencyListKey ,
80- AdjacencyListKey [ ] ,
93+ TAdjacencyListKey ,
94+ TAdjacencyListColumnKey [ ] ,
8195 ] [ ]
8296
8397 for ( const [ sourceModelName , sourceColumns ] of sources ) {
84- const sourceNodeId = toNodeID ( sourceModelName )
98+ const sourceNodeId = toNodeID < TNodeID > ( sourceModelName )
8599
86- modelLevelEdgeIDs . set ( toEdgeID ( sourceModelName , targetModelName ) , [
87- sourceNodeId ,
88- targetNodeId ,
89- ] )
100+ modelLevelEdgeIDs . set (
101+ toEdgeID < TEdgeID > ( sourceModelName , targetModelName ) ,
102+ [ sourceNodeId , targetNodeId ] ,
103+ )
90104
91105 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 > (
93113 sourceModelName ,
94114 sourceColumnName ,
115+ )
116+ const targetColumnId = toPortID < TPortID > (
95117 targetModelName ,
96118 targetColumnName ,
97119 )
98- const sourceColumnId = toPortID ( sourceModelName , sourceColumnName )
99- const targetColumnId = toPortID ( targetModelName , targetColumnName )
100120
101121 edges . push (
102122 transformEdge (
@@ -121,19 +141,26 @@ export function getEdgesFromColumnLineage<
121141 return edges
122142}
123143
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+ > ,
126153) {
127- const connectedColumns = new Set < PortId > ( )
154+ const connectedColumns = new Set < TColumnID > ( )
128155 const targets = Object . entries ( adjacencyList ) as [
129- AdjacencyListKey ,
130- ColumnLevelConnections ,
156+ TAdjacencyListKey ,
157+ ColumnLevelConnections < TAdjacencyListKey , TAdjacencyListColumnKey > ,
131158 ] [ ]
132159
133160 for ( const [ sourceModelName , targetColumns ] of targets ) {
134161 const targetConnections = Object . entries ( targetColumns ) as [
135- AdjacencyListColumnKey ,
136- ColumnLevelDetails ,
162+ TAdjacencyListColumnKey ,
163+ ColumnLevelDetails < TAdjacencyListKey , TAdjacencyListColumnKey > ,
137164 ] [ ]
138165
139166 for ( const [
@@ -143,8 +170,8 @@ export function getConnectedColumnsIDs(
143170 connectedColumns . add ( toPortID ( sourceModelName , sourceColumnName ) )
144171
145172 const sources = Object . entries ( sourceModels ) as [
146- AdjacencyListKey ,
147- AdjacencyListKey [ ] ,
173+ TAdjacencyListKey ,
174+ TAdjacencyListColumnKey [ ] ,
148175 ] [ ]
149176
150177 for ( const [ targetModelName , sourceColumns ] of sources ) {
0 commit comments