Skip to content

Commit a0534a9

Browse files
committed
types
1 parent e5b0c2b commit a0534a9

File tree

4 files changed

+26
-61
lines changed

4 files changed

+26
-61
lines changed

vscode/bus/src/brand.ts

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -17,26 +17,3 @@ type Brand<B> = { [__brand]: B }
1717
* userId == userName -> compile error
1818
*/
1919
export type Branded<T, B> = T & Brand<B>
20-
21-
/**
22-
* Constraint that only accepts branded string types
23-
*/
24-
export type BrandedString = string & Brand<string>
25-
26-
/**
27-
* BrandedRecord is a type that creates a branded Record type with strict key checking.
28-
* This ensures that Record<BrandedKey1, V> is NOT assignable to Record<BrandedKey2, V>
29-
*
30-
* @example
31-
* type ModelFQN = Branded<string, 'ModelFQN'>
32-
* type ModelName = Branded<string, 'ModelName'>
33-
*
34-
* type FQNMap = BrandedRecord<ModelFQN, string>
35-
* type NameMap = BrandedRecord<ModelName, string>
36-
*
37-
* const fqnMap: FQNMap = {}
38-
* const nameMap: NameMap = fqnMap // TypeScript error!
39-
*/
40-
export type BrandedRecord<K extends BrandedString, V> = Record<K, V> & {
41-
readonly __recordKeyBrand: K
42-
}

vscode/react/src/pages/ModelLineageContext.ts

Lines changed: 4 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -28,25 +28,6 @@ export type ModelColumnRightHandleId = Branded<
2828
'ModelColumnRightHandleId'
2929
>
3030

31-
export type BrandedLineageAdjacencyList = LineageAdjacencyList<ModelFQN> & {
32-
readonly __adjacencyListKeyBrand: ModelFQN
33-
}
34-
35-
export type BrandedLineageDetails = LineageDetails<
36-
ModelFQN,
37-
ModelLineageNodeDetails
38-
> & {
39-
readonly __lineageDetailsKeyBrand: ModelFQN
40-
}
41-
42-
export type BrandedModelColumns = Record<ModelColumnName, Column>
43-
44-
export type BrandedColumnLevelLineageAdjacencyList =
45-
ColumnLevelLineageAdjacencyList<ModelFQN, ModelColumnName> & {
46-
readonly __columnLevelLineageAdjacencyListKeyBrand: ModelFQN
47-
readonly __columnLevelLineageAdjacencyListColumnKeyBrand: ModelColumnName
48-
}
49-
5031
export type ModelLineageNodeDetails = {
5132
name: ModelFQN
5233
display_name: ModelName
@@ -58,7 +39,7 @@ export type ModelLineageNodeDetails = {
5839
owner?: string | null
5940
kind?: string | null
6041
tags?: string[]
61-
columns?: BrandedModelColumns
42+
columns?: Record<ModelColumnName, Column>
6243
}
6344

6445
export type NodeData = {
@@ -72,7 +53,7 @@ export type NodeData = {
7253
owner?: string | null
7354
dialect?: string | null
7455
tags?: string[]
75-
columns?: BrandedModelColumns
56+
columns?: Record<ModelColumnName, Column>
7657
}
7758

7859
export type EdgeData = {
@@ -86,7 +67,7 @@ export type ModelLineageContextValue = ColumnLevelLineageContextValue<
8667
ModelFQN,
8768
ModelColumnName,
8869
ModelColumnID,
89-
BrandedColumnLevelLineageAdjacencyList
70+
ColumnLevelLineageAdjacencyList<ModelFQN, ModelColumnName>
9071
> &
9172
LineageContextValue<
9273
NodeData,
@@ -105,7 +86,7 @@ export const initial = {
10586
ModelFQN,
10687
ModelColumnName,
10788
ModelColumnID,
108-
BrandedColumnLevelLineageAdjacencyList
89+
ColumnLevelLineageAdjacencyList<ModelFQN, ModelColumnName>
10990
>(),
11091
}
11192

vscode/react/src/pages/ModelNodeColumn.tsx

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
import React from 'react'
22

3-
import { FactoryColumn } from '@sqlmesh-common/components/Lineage'
3+
import {
4+
FactoryColumn,
5+
type ColumnLevelLineageAdjacencyList,
6+
} from '@sqlmesh-common/components/Lineage'
47
import { cn } from '@sqlmesh-common/utils'
58
import {
69
useModelLineage,
710
type ModelColumnID,
811
type ModelNodeId,
912
type ModelColumnName,
10-
type BrandedColumnLevelLineageAdjacencyList,
1113
type ModelColumnRightHandleId,
1214
type ModelColumnLeftHandleId,
1315
} from './ModelLineageContext'
@@ -21,7 +23,7 @@ const ModelColumn = FactoryColumn<
2123
ModelColumnID,
2224
ModelColumnLeftHandleId,
2325
ModelColumnRightHandleId,
24-
BrandedColumnLevelLineageAdjacencyList
26+
ColumnLevelLineageAdjacencyList<ModelFQN, ModelColumnName>
2527
>(useModelLineage)
2628

2729
export const ModelNodeColumn = React.memo(function ModelNodeColumn({
@@ -53,7 +55,7 @@ export const ModelNodeColumn = React.memo(function ModelNodeColumn({
5355
} = useApiColumnLineage(nodeId, name, { models_only: true })
5456

5557
const [columnLineageData, setColumnLineageData] = React.useState<
56-
BrandedColumnLevelLineageAdjacencyList | undefined
58+
ColumnLevelLineageAdjacencyList<ModelFQN, ModelColumnName> | undefined
5759
>(undefined)
5860

5961
const toggleSelectedColumn = React.useCallback(async () => {
@@ -69,7 +71,9 @@ export const ModelNodeColumn = React.memo(function ModelNodeColumn({
6971
})
7072

7173
const { data } = (await getColumnLineage()) as {
72-
data: BrandedColumnLevelLineageAdjacencyList | undefined
74+
data:
75+
| ColumnLevelLineageAdjacencyList<ModelFQN, ModelColumnName>
76+
| undefined
7377
}
7478

7579
setColumnLineageData(data)

vscode/react/src/pages/lineage.tsx

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,17 @@ import {
2323
import { ModelLineage } from './ModelLineage'
2424
import type {
2525
ModelColumnName,
26-
BrandedLineageAdjacencyList,
27-
BrandedLineageDetails,
26+
ModelLineageNodeDetails,
2827
ModelNodeId,
2928
NodeData,
3029
} from './ModelLineageContext'
31-
import type { Column, LineageNode } from '@sqlmesh-common/components/Lineage'
30+
import type {
31+
Column,
32+
LineageAdjacencyList,
33+
LineageDetails,
34+
LineageNode,
35+
} from '@sqlmesh-common/components/Lineage'
3236
import { useVSCode } from '@/hooks/vscode'
33-
import type { BrandedRecord } from '@bus/brand'
3437

3538
export function LineagePage() {
3639
const { emit } = useEventBus()
@@ -138,7 +141,7 @@ function Lineage() {
138141
acc[model.fqn as ModelFQN] = model
139142
return acc
140143
},
141-
{} as BrandedRecord<ModelFQN, Model>,
144+
{} as Record<ModelFQN, Model>,
142145
)
143146

144147
React.useEffect(() => {
@@ -198,7 +201,7 @@ export function LineageComponentFromWeb({
198201
models,
199202
}: {
200203
selectedModel: ModelFQN
201-
models: BrandedRecord<ModelFQN, Model>
204+
models: Record<ModelFQN, Model>
202205
}) {
203206
const vscode = useVSCode()
204207

@@ -223,7 +226,7 @@ export function LineageComponentFromWeb({
223226
const { refetch: getModelLineage } = useApiModelLineage(model?.name ?? '')
224227

225228
const [modelLineage, setModelLineage] = useState<
226-
BrandedLineageAdjacencyList | undefined
229+
LineageAdjacencyList<ModelFQN> | undefined
227230
>(undefined)
228231

229232
const handleNodeClick = React.useCallback(
@@ -253,7 +256,7 @@ export function LineageComponentFromWeb({
253256

254257
getModelLineage()
255258
.then(({ data }) => {
256-
setModelLineage(data as unknown as BrandedLineageAdjacencyList)
259+
setModelLineage(data as unknown as LineageAdjacencyList<ModelFQN>)
257260
})
258261
.catch(handleError)
259262
}, [model?.name, model?.hash])
@@ -281,12 +284,12 @@ export function LineageComponentFromWeb({
281284
}
282285
return acc
283286
},
284-
{} as BrandedRecord<ModelColumnName, Column>,
287+
{} as Record<ModelColumnName, Column>,
285288
),
286289
}
287290
return acc
288291
},
289-
{} as BrandedLineageDetails,
292+
{} as LineageDetails<ModelFQN, ModelLineageNodeDetails>,
290293
)
291294

292295
if (!modelLineage || !lineageDetails) {

0 commit comments

Comments
 (0)