Skip to content

Commit a169a38

Browse files
committed
temp [ci skip]
1 parent 020edef commit a169a38

6 files changed

Lines changed: 98 additions & 26 deletions

File tree

package-lock.json

Lines changed: 7 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vscode/bus/src/callbacks.ts

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ export type Callback = {
22
openFile: {
33
path: string
44
}
5-
formatProject: {}
65
}
76

87
/**
@@ -12,8 +11,20 @@ export type Callback = {
1211
*
1312
* Example:
1413
* const openFileEvent: CallbackEvent<'openFile'> = ['openFile', { path: '/path/to/file' }];
15-
* const formatProjectEvent: CallbackEvent<'formatProject'> = ['formatProject', {}];
1614
*/
1715
export type CallbackEvent = {
1816
[K in keyof Callback]: { key: K; payload: Callback[K] }
19-
}[keyof Callback];
17+
}[keyof Callback];
18+
19+
/**
20+
* A tuple type representing a VSCode event with its associated payload.
21+
*/
22+
export type VSCodeCallback = {
23+
changeFocusOnFile: {
24+
path: string
25+
}
26+
}
27+
28+
export type VSCodeEvent = {
29+
[K in keyof VSCodeCallback]: { key: K; payload: VSCodeCallback[K] }
30+
}[keyof VSCodeCallback];

vscode/extension/src/extension.ts

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
} from "./utilities/common/vscodeapi"
88
import {
99
registerLogger,
10+
traceError,
1011
traceInfo,
1112
traceVerbose,
1213
} from "./utilities/common/log"
@@ -16,9 +17,9 @@ import { AuthenticationProviderTobikoCloud } from "./auth/auth"
1617
import { signOut } from "./commands/signout"
1718
import { signIn } from "./commands/signin"
1819
import { signInSpecifyFlow } from "./commands/signinSpecifyFlow"
19-
import { isErr } from "./utilities/functional/result"
20-
import { handleNotSginedInError } from "./utilities/errors"
21-
import { WebServer } from "./web-server/server"
20+
import { isErr, Result } from "./utilities/functional/result"
21+
import { ErrorType, handleNotSginedInError } from "./utilities/errors"
22+
import { startWebServer, WebServer } from "./web-server/server"
2223
import { LineagePanel } from "./webviews/lineagePanel"
2324

2425
let lspClient: LSPClient | undefined
@@ -34,6 +35,12 @@ export async function activate(context: vscode.ExtensionContext) {
3435
)
3536
traceInfo("Activating SQLMesh extension")
3637

38+
const webServerOutputChannel = createOutputChannel("sqlmesh-webserver")
39+
context.subscriptions.push(
40+
webServerOutputChannel,
41+
registerLogger(webServerOutputChannel)
42+
)
43+
3744
traceInfo("Registering authentication provider")
3845
const authProvider = new AuthenticationProviderTobikoCloud()
3946
context.subscriptions.push(
@@ -80,7 +87,25 @@ export async function activate(context: vscode.ExtensionContext) {
8087
}
8188
context.subscriptions.push(lspClient)
8289

90+
// start web server
91+
const webServerResult = await startWebServer(webServerOutputChannel)
92+
if (!isErr(webServerResult)) {
93+
webServer = webServerResult.value
94+
} else {
95+
traceError("Failed to start web server", webServerResult.error)
96+
}
97+
8398
const restart = async () => {
99+
if (webServer) {
100+
webServer.stop();
101+
webServer = undefined;
102+
const webServerResult = await startWebServer(webServerOutputChannel)
103+
if (!isErr(webServerResult)) {
104+
webServer = webServerResult.value
105+
} else {
106+
traceError("Failed to start web server", webServerResult.error)
107+
}
108+
}
84109
if (lspClient) {
85110
traceVerbose("Restarting LSP client")
86111
const restartResult = await lspClient.restart()

vscode/extension/src/webviews/lineagePanel.ts

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,21 @@ export class LineagePanel implements WebviewViewProvider, Disposable {
2222
public constructor(extensionUri: Uri, getServerUrl: () => string) {
2323
this._extensionUri = extensionUri;
2424
this.getServerUrl = getServerUrl;
25-
window.onDidChangeActiveTextEditor(() => {
26-
if (this.panel) {
27-
const { externalUrl, externalAuthority } =
28-
this.externalUrlAndAutority();
29-
this.panel.webview.html = this.getHtml(externalUrl, externalAuthority);
25+
26+
if (this.panel) {
27+
const { externalUrl, externalAuthority } = this.externalUrlAndAutority();
28+
this.panel.webview.html = this.getHtml(externalUrl, externalAuthority);
29+
}
30+
31+
window.onDidChangeActiveTextEditor((editor) => {
32+
if (editor) {
33+
this.panel?.webview.postMessage({
34+
key: "vscode_callback",
35+
payload: {
36+
key: "changeFocusOnFile",
37+
payload: { path: editor.document.uri.fsPath },
38+
},
39+
});
3040
}
3141
});
3242
}
@@ -133,7 +143,7 @@ export class LineagePanel implements WebviewViewProvider, Disposable {
133143
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; frame-src ${externalAuthority}; connect-src ${externalAuthority}; img-src ${externalAuthority} data:; script-src 'unsafe-inline' ${externalAuthority}; style-src 'unsafe-inline' ${externalAuthority};">
134144
</head>
135145
<body>
136-
${isProduction() ? '' : `<div>${externalUrl}</div>`}
146+
${isProduction() ? "" : `<div>${externalUrl}</div>`}
137147
<iframe src="${externalUrl}" style="width:100%; height:100vh;" frameborder="0" allow="clipboard-read; clipboard-write"></iframe>
138148
</body>
139149
</html> `;

vscode/react/package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,15 @@
2020
"@tanstack/router-plugin": "^1.114.3",
2121
"apache-arrow": "^19.0.1",
2222
"orval": "^7.8.0",
23-
"react": "^18.2.0",
24-
"react-dom": "^18.2.0",
23+
"react": "^19.1.0",
24+
"react-dom": "^19.1.0",
2525
"tailwindcss": "^4.1.3"
2626
},
2727
"devDependencies": {
2828
"@testing-library/dom": "^10.4.0",
2929
"@testing-library/react": "^16.2.0",
30-
"@types/react": "^18.2.0",
31-
"@types/react-dom": "^18.2.0",
30+
"@types/react": "^19.1.2",
31+
"@types/react-dom": "^19.1.2",
3232
"@vitejs/plugin-react": "^4.3.4",
3333
"jsdom": "^26.0.0",
3434
"typescript": "^5.7.2",

vscode/react/src/routes/lineage.tsx

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,41 @@ import { useApiModelLineage, useApiModels } from '@/api'
99
import LineageFlowProvider from '@/components/graph/context'
1010
import { ModelLineage } from '@/components/graph/ModelLineage'
1111
import { useVSCode } from '@/hooks/vscode'
12+
import React from 'react'
1213

1314
export const Route = createFileRoute('/lineage')({
1415
component: Wrappper,
1516
})
1617

1718
function Wrappper() {
19+
// Handle messages from VSCode extension
20+
React.useEffect(() => {
21+
const handleMessage = (event: MessageEvent) => {
22+
// Ensure the message is from VSCode
23+
if (event.data && event.data.key === 'vscode_callback') {
24+
const payload = event.data.payload
25+
console.log('Received message from VSCode:', payload)
26+
27+
// Handle different types of messages
28+
switch (payload.key) {
29+
case 'changeFocusOnFile':
30+
console.log('Changing focus to file:', payload.payload.path)
31+
// Implement your focus change logic here
32+
break
33+
default:
34+
console.log('Unhandled message type:', payload.key)
35+
}
36+
}
37+
}
38+
39+
window.addEventListener('message', handleMessage)
40+
41+
// Clean up event listener on component unmount
42+
return () => {
43+
window.removeEventListener('message', handleMessage)
44+
}
45+
}, [])
46+
1847
const client = new QueryClient({
1948
queryCache: new QueryCache({
2049
onError(error, query) {

0 commit comments

Comments
 (0)