Skip to content

Commit e67a7c8

Browse files
committed
chore(vscode): adding typing to worker message bus
1 parent 64ecc4d commit e67a7c8

File tree

6 files changed

+95
-35
lines changed

6 files changed

+95
-35
lines changed

vscode/react/src/components/graph/ModelLineage.tsx

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import ReactFlow, {
1717
} from 'reactflow'
1818
import Loading from '@/components/loading/Loading'
1919
import Spinner from '@/components/logo/Spinner'
20-
import { createLineageWorker } from '@/workers/index'
20+
import { createLineageWorker } from '@/components/graph/workers/index'
2121
import { isArrayEmpty, isFalse, isNil, isNotNil } from '@/utils/index'
2222
import clsx from 'clsx'
2323
import ModelNode from './ModelNode'
@@ -35,7 +35,13 @@ import {
3535
type ModelLineage as ModelLineageType,
3636
} from '@/domain/lineage'
3737
import './Graph.css'
38-
import { toKeys } from './types'
38+
import {
39+
toKeys,
40+
type LineageWorkerMessage,
41+
type LineageWorkerRequestMessage,
42+
type LineageWorkerResponseMessage,
43+
type LineageWorkerErrorMessage,
44+
} from './types'
3945
import { encode } from '@/domain/models'
4046

4147
const WITH_COLUMNS_LIMIT = 30
@@ -95,14 +101,15 @@ export function ModelLineage({
95101

96102
setIsMergingModels(true)
97103

98-
lineageWorker.postMessage({
104+
const message: LineageWorkerRequestMessage = {
99105
topic: 'lineage',
100106
payload: {
101107
currentLineage: {},
102108
newLineage: data,
103109
mainNode: model.fqn,
104110
},
105-
})
111+
}
112+
lineageWorker.postMessage(message)
106113
})
107114
.catch(error => {
108115
handleError?.(error)
@@ -146,21 +153,25 @@ export function ModelLineage({
146153
setHighlightedNodes(highlightedNodes ?? {})
147154
}, [highlightedNodes])
148155

149-
function handleLineageWorkerMessage(e: MessageEvent): void {
156+
function handleLineageWorkerMessage(
157+
e: MessageEvent<LineageWorkerMessage>,
158+
): void {
150159
if (e.data.topic === 'lineage') {
160+
const message = e.data as LineageWorkerResponseMessage
151161
setIsMergingModels(false)
152-
setNodeConnections(e.data.payload.nodesConnections)
153-
setLineage(e.data.payload.lineage)
162+
setNodeConnections(message.payload.nodesConnections)
163+
setLineage(message.payload.lineage)
154164

155165
if (
156-
Object.values(e.data.payload?.lineage ?? {}).length > WITH_COLUMNS_LIMIT
166+
Object.values(message.payload.lineage ?? {}).length > WITH_COLUMNS_LIMIT
157167
) {
158168
setWithColumns(false)
159169
}
160170
}
161171

162172
if (e.data.topic === 'error') {
163-
handleError?.(e.data.error)
173+
const message = e.data as LineageWorkerErrorMessage
174+
handleError?.(message.error)
164175
setIsMergingModels(false)
165176
}
166177
}

vscode/react/src/components/graph/context.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import type { ModelEncodedFQN, ModelName } from '@/domain/models'
1414
import type { ColumnName } from '@/domain/column'
1515
import type { Model } from '@/api/client'
1616
import { toID, toKeys } from './types'
17-
import type { ConnectedNode } from '@/workers/lineage'
17+
import type { ConnectedNode } from '@/components/graph/types'
1818

1919
export interface Connections {
2020
left: string[]

vscode/react/src/components/graph/help.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import {
1515
type LineageNodeModelType,
1616
} from './ModelNode'
1717
import type { Lineage } from '@/domain/lineage'
18-
import type { ConnectedNode } from '@/workers/lineage'
18+
import type { ConnectedNode } from '@/components/graph/types'
1919
import { encode, type ModelEncodedFQN, type ModelURI } from '@/domain/models'
2020
import type { Column, ColumnName } from '@/domain/column'
2121
import type { ModelSQLMeshModel } from '@/domain/sqlmesh-model'

vscode/react/src/components/graph/types.ts

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
import type { ColumnName } from '@/domain/column'
22
import type { ModelEncodedFQN } from '@/domain/models'
33
import type { Branded } from '@bus/brand'
4+
import type { Lineage } from '@/domain/lineage'
45

56
export type Side = 'left' | 'right'
67

8+
export type Direction = 'upstream' | 'downstream'
9+
710
export type NodeId = string
811

912
export type EdgeId = string
@@ -55,3 +58,44 @@ export function toKeys<K extends string, V>(obj: Record<K, V>): K[] {
5558
}
5659

5760
export type ModelLineage = Record<ModelEncodedFQN, ModelEncodedFQN[]>
61+
62+
// Worker Message Types
63+
export interface ConnectedNode {
64+
id?: string
65+
edges: ConnectedNode[]
66+
}
67+
68+
export interface LineageWorkerRequestPayload {
69+
currentLineage: Record<string, Lineage>
70+
newLineage: Record<string, string[]>
71+
mainNode: string
72+
}
73+
74+
export interface LineageWorkerResponsePayload {
75+
lineage: Record<string, Lineage>
76+
nodesConnections: Record<string, ConnectedNode>
77+
}
78+
79+
export interface LineageWorkerErrorPayload {
80+
error: Error
81+
}
82+
83+
export interface LineageWorkerRequestMessage {
84+
topic: 'lineage'
85+
payload: LineageWorkerRequestPayload
86+
}
87+
88+
export interface LineageWorkerResponseMessage {
89+
topic: 'lineage'
90+
payload: LineageWorkerResponsePayload
91+
}
92+
93+
export interface LineageWorkerErrorMessage {
94+
topic: 'error'
95+
error: Error
96+
}
97+
98+
export type LineageWorkerMessage =
99+
| LineageWorkerRequestMessage
100+
| LineageWorkerResponseMessage
101+
| LineageWorkerErrorMessage
File renamed without changes.

vscode/react/src/workers/lineage.ts renamed to vscode/react/src/components/graph/workers/lineage.ts

Lines changed: 29 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,46 @@
11
import { isFalse, isNil } from '@/utils/index'
22
import { type Lineage } from '@/domain/lineage'
33
import type { ModelEncodedFQN } from '@/domain/models'
4-
import { toID, type NodeId } from '@/components/graph/types'
5-
6-
export interface ConnectedNode {
7-
id?: string
8-
edges: ConnectedNode[]
4+
import {
5+
toID,
6+
type NodeId,
7+
type LineageWorkerMessage,
8+
type LineageWorkerRequestMessage,
9+
type LineageWorkerResponseMessage,
10+
type LineageWorkerErrorMessage,
11+
type ConnectedNode,
12+
} from '@/components/graph/types'
13+
import type { Direction } from '../types'
14+
15+
interface WorkerScope {
16+
onmessage: ((e: MessageEvent<LineageWorkerMessage>) => void) | null
17+
postMessage: (message: LineageWorkerMessage) => void
918
}
1019

11-
const EnumDirection = {
12-
Upstream: 'upstream',
13-
Downstream: 'downstream',
14-
} as const
15-
16-
type Direction = (typeof EnumDirection)[keyof typeof EnumDirection]
17-
18-
const scope = self as any
20+
const scope = self as unknown as WorkerScope
1921

20-
scope.onmessage = async (e: MessageEvent) => {
22+
scope.onmessage = async (e: MessageEvent<LineageWorkerMessage>) => {
2123
if (e.data.topic === 'lineage') {
2224
try {
23-
const { currentLineage, newLineage, mainNode } = e.data.payload
25+
const message = e.data as LineageWorkerRequestMessage
26+
const { currentLineage, newLineage, mainNode } = message.payload
2427
const lineage = await mergeLineageWithModels(currentLineage, newLineage)
2528
const nodesConnections = await getNodesConnections(mainNode, lineage)
2629

27-
scope.postMessage({
30+
const responseMessage: LineageWorkerResponseMessage = {
2831
topic: 'lineage',
2932
payload: {
3033
lineage,
3134
nodesConnections,
3235
},
33-
})
36+
}
37+
scope.postMessage(responseMessage)
3438
} catch (error) {
35-
scope.postMessage({
39+
const errorMessage: LineageWorkerErrorMessage = {
3640
topic: 'error',
37-
error,
38-
})
41+
error: error as Error,
42+
}
43+
scope.postMessage(errorMessage)
3944
}
4045
}
4146
}
@@ -69,8 +74,8 @@ async function getNodesConnections(
6974
const distances: Record<string, ConnectedNode> = {}
7075

7176
try {
72-
getConnectedNodes(EnumDirection.Upstream, mainNode, lineage, distances)
73-
getConnectedNodes(EnumDirection.Downstream, mainNode, lineage, distances)
77+
getConnectedNodes('upstream', mainNode, lineage, distances)
78+
getConnectedNodes('downstream', mainNode, lineage, distances)
7479
} catch (error) {
7580
reject(error)
7681
}
@@ -80,12 +85,12 @@ async function getNodesConnections(
8085
}
8186

8287
function getConnectedNodes(
83-
direction: Direction = EnumDirection.Downstream,
88+
direction: Direction = 'downstream',
8489
node: string,
8590
lineage: Record<string, Lineage> = {},
8691
result: Record<string, ConnectedNode> = {},
8792
): void {
88-
const isDownstream = direction === EnumDirection.Downstream
93+
const isDownstream = direction === 'downstream'
8994
let models: string[] = []
9095

9196
if (isDownstream) {

0 commit comments

Comments
 (0)