Files
languageservices/browser-playground/src/client/client.ts
T

58 lines
1.6 KiB
TypeScript
Raw Normal View History

2022-12-07 18:58:39 -08:00
import * as monaco from "monaco-editor";
2023-01-09 19:02:19 -05:00
import {CloseAction, ErrorAction, MessageTransports, MonacoLanguageClient, MonacoServices} from "monaco-languageclient";
import {BrowserMessageReader, BrowserMessageWriter} from "vscode-languageserver-protocol/browser.js";
2022-12-07 18:58:39 -08:00
monaco.editor.create(document.getElementById("container")!, {
2022-12-07 19:31:32 -08:00
value: `name: Demo workflow
on:
push:
workflow_dispatch:
inputs:
name:
type: string
jobs:
say-hello:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: echo "Hello \${{ github.event.inputs.name }}"`,
2022-12-07 18:58:39 -08:00
language: "yaml",
2023-01-09 19:02:19 -05:00
wordBasedSuggestions: false
2022-12-07 18:58:39 -08:00
});
2023-01-09 19:02:19 -05:00
function createLanguageClient(transports: MessageTransports): MonacoLanguageClient {
2022-12-07 19:31:32 -08:00
return new MonacoLanguageClient({
name: "GitHub Actions Language Client",
clientOptions: {
// Handle all yaml files as workflows
2023-01-09 19:02:19 -05:00
documentSelector: [{language: "yaml"}],
2022-12-07 19:31:32 -08:00
errorHandler: {
2023-01-09 19:02:19 -05:00
error: () => ({action: ErrorAction.Continue}),
closed: () => ({action: CloseAction.DoNotRestart})
2022-12-07 19:31:32 -08:00
},
// Custom options for the GitHub Actions language server
2023-01-09 19:02:19 -05:00
initializationOptions: {}
2022-12-07 19:31:32 -08:00
},
connectionProvider: {
2023-01-09 19:02:19 -05:00
get: () => Promise.resolve(transports)
}
2022-12-07 19:31:32 -08:00
});
}
2022-12-07 18:58:39 -08:00
MonacoServices.install();
2023-01-09 19:02:19 -05:00
const worker = new Worker(new URL("../service-worker/service-worker.ts", import.meta.url), {
type: "module"
});
2022-12-07 18:58:39 -08:00
2022-12-07 19:31:32 -08:00
const reader = new BrowserMessageReader(worker);
const writer = new BrowserMessageWriter(worker);
2023-01-09 19:02:19 -05:00
const languageClient = createLanguageClient({reader, writer});
2022-12-07 19:31:32 -08:00
languageClient.start();
reader.onClose(() => languageClient.stop());