fix: monaco editor fixes

This commit is contained in:
Ruben Fiszel
2022-07-27 21:07:38 +02:00
parent 390e9b37fb
commit f255cc253f
6 changed files with 93 additions and 106 deletions
+51 -78
View File
@@ -14,7 +14,7 @@
"highlight.js": "^11.5.1",
"monaco-editor": "^0.33.0",
"monaco-editor-workers": "^0.33.0",
"monaco-languageclient": "2.0.2",
"monaco-languageclient": "2.1.0",
"vscode-ws-jsonrpc": "^1.0.2"
},
"devDependencies": {
@@ -23,7 +23,7 @@
"@sveltejs/kit": "next",
"@tailwindcss/forms": "^0.5.1",
"@tailwindcss/typography": "^0.5.3",
"@types/vscode": "^1.69.0",
"@types/vscode": "~1.67.0",
"@typescript-eslint/eslint-plugin": "^5.31.0",
"@typescript-eslint/parser": "^5.31.0",
"@zerodevx/svelte-toast": "^0.7.2",
@@ -474,9 +474,10 @@
}
},
"node_modules/@types/vscode": {
"version": "1.69.0",
"dev": true,
"license": "MIT"
"version": "1.67.0",
"resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.67.0.tgz",
"integrity": "sha512-GH8BDf8cw9AC9080uneJfulhSa7KHSMI2s/CyKePXoGNos9J486w2V4YKoeNUqIEkW4hKoEAWp6/cXTwyGj47g==",
"dev": true
},
"node_modules/@typescript-eslint/eslint-plugin": {
"version": "5.31.0",
@@ -2644,26 +2645,18 @@
}
},
"node_modules/monaco-languageclient": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/monaco-languageclient/-/monaco-languageclient-2.0.2.tgz",
"integrity": "sha512-r9Zm6IrVuoJI/9BT8avCXkOXqWApvwQ/f1R9d5ZJHkDHUae/iOYvu9LLQHkMdsG4ilPfDsWoGTN51EVUAHtppw==",
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/monaco-languageclient/-/monaco-languageclient-2.1.0.tgz",
"integrity": "sha512-Ps+G97MH8p/T7dk7NqJnDgub6x2+SiAmFR6rjUyJ2qdSGUNgg310bPD521rEPUTNKGfP7VwBggFjcnoGGCi0vg==",
"dependencies": {
"glob-to-regexp": "0.4.1",
"vscode": "npm:@codingame/monaco-vscode-api@^1.68.4",
"vscode-jsonrpc": "8.0.1",
"vscode-languageclient": "8.0.1",
"vscode": "npm:@codingame/monaco-vscode-api@~1.67.20",
"vscode-jsonrpc": "8.0.2",
"vscode-languageclient": "8.0.2",
"vscode-languageserver-textdocument": "1.0.5",
"vscode-uri": "3.0.3"
}
},
"node_modules/monaco-languageclient/node_modules/vscode-jsonrpc": {
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.1.tgz",
"integrity": "sha512-N/WKvghIajmEvXpatSzvTvOIz61ZSmOSa4BRA4pTLi+1+jozquQKP/MkaylP9iB68k73Oua1feLQvH3xQuigiQ==",
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/mri": {
"version": "1.2.0",
"dev": true,
@@ -4679,9 +4672,9 @@
},
"node_modules/vscode": {
"name": "@codingame/monaco-vscode-api",
"version": "1.68.7",
"resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-api/-/monaco-vscode-api-1.68.7.tgz",
"integrity": "sha512-pJ5ukCDNrHh6rgE0GnGWXVWdE9T8UWqM0mju3LfDQ5iP6NjxEQsBmZsb+lEtzPGWwv5y/WWchztMzoW0qF/Z4Q==",
"version": "1.67.20",
"resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-api/-/monaco-vscode-api-1.67.20.tgz",
"integrity": "sha512-3+swJLtpNWmn2hsnVFv/qbLuQLt+FlaDLgcK0PgYwWVIJn2FjO48a0+ke8ZYS/tiqZxJgJSk+y6hdohgZo7n0g==",
"dependencies": {
"monaco-editor": "^0.33.0"
}
@@ -4695,33 +4688,25 @@
}
},
"node_modules/vscode-languageclient": {
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-8.0.1.tgz",
"integrity": "sha512-9XoE+HJfaWvu7Y75H3VmLo5WLCtsbxEgEhrLPqwt7eyoR49lUIyyrjb98Yfa50JCMqF2cePJAEVI6oe2o1sIhw==",
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-8.0.2.tgz",
"integrity": "sha512-lHlthJtphG9gibGb/y72CKqQUxwPsMXijJVpHEC2bvbFqxmkj9LwQ3aGU9dwjBLqsX1S4KjShYppLvg1UJDF/Q==",
"dependencies": {
"minimatch": "^3.0.4",
"semver": "^7.3.5",
"vscode-languageserver-protocol": "3.17.1"
"vscode-languageserver-protocol": "3.17.2"
},
"engines": {
"vscode": "^1.67.0"
}
},
"node_modules/vscode-languageserver-protocol": {
"version": "3.17.1",
"resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.1.tgz",
"integrity": "sha512-BNlAYgQoYwlSgDLJhSG+DeA8G1JyECqRzM2YO6tMmMji3Ad9Mw6AW7vnZMti90qlAKb0LqAlJfSVGEdqMMNzKg==",
"version": "3.17.2",
"resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.2.tgz",
"integrity": "sha512-8kYisQ3z/SQ2kyjlNeQxbkkTNmVFoQCqkmGrzLH6A9ecPlgTbp3wDTnUNqaUxYr4vlAcloxx8zwy7G5WdguYNg==",
"dependencies": {
"vscode-jsonrpc": "8.0.1",
"vscode-languageserver-types": "3.17.1"
}
},
"node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc": {
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.1.tgz",
"integrity": "sha512-N/WKvghIajmEvXpatSzvTvOIz61ZSmOSa4BRA4pTLi+1+jozquQKP/MkaylP9iB68k73Oua1feLQvH3xQuigiQ==",
"engines": {
"node": ">=14.0.0"
"vscode-jsonrpc": "8.0.2",
"vscode-languageserver-types": "3.17.2"
}
},
"node_modules/vscode-languageserver-textdocument": {
@@ -4729,9 +4714,9 @@
"license": "MIT"
},
"node_modules/vscode-languageserver-types": {
"version": "3.17.1",
"resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.1.tgz",
"integrity": "sha512-K3HqVRPElLZVVPtMeKlsyL9aK0GxGQpvtAUTfX4k7+iJ4mc1M+JM+zQwkgGy2LzY0f0IAafe8MKqIkJrxfGGjQ=="
"version": "3.17.2",
"resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz",
"integrity": "sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA=="
},
"node_modules/vscode-uri": {
"version": "3.0.3",
@@ -5114,7 +5099,9 @@
}
},
"@types/vscode": {
"version": "1.69.0",
"version": "1.67.0",
"resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.67.0.tgz",
"integrity": "sha512-GH8BDf8cw9AC9080uneJfulhSa7KHSMI2s/CyKePXoGNos9J486w2V4YKoeNUqIEkW4hKoEAWp6/cXTwyGj47g==",
"dev": true
},
"@typescript-eslint/eslint-plugin": {
@@ -6461,23 +6448,16 @@
}
},
"monaco-languageclient": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/monaco-languageclient/-/monaco-languageclient-2.0.2.tgz",
"integrity": "sha512-r9Zm6IrVuoJI/9BT8avCXkOXqWApvwQ/f1R9d5ZJHkDHUae/iOYvu9LLQHkMdsG4ilPfDsWoGTN51EVUAHtppw==",
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/monaco-languageclient/-/monaco-languageclient-2.1.0.tgz",
"integrity": "sha512-Ps+G97MH8p/T7dk7NqJnDgub6x2+SiAmFR6rjUyJ2qdSGUNgg310bPD521rEPUTNKGfP7VwBggFjcnoGGCi0vg==",
"requires": {
"glob-to-regexp": "0.4.1",
"vscode": "npm:@codingame/monaco-vscode-api@^1.68.4",
"vscode-jsonrpc": "8.0.1",
"vscode-languageclient": "8.0.1",
"vscode": "npm:@codingame/monaco-vscode-api@~1.67.20",
"vscode-jsonrpc": "8.0.2",
"vscode-languageclient": "8.0.2",
"vscode-languageserver-textdocument": "1.0.5",
"vscode-uri": "3.0.3"
},
"dependencies": {
"vscode-jsonrpc": {
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.1.tgz",
"integrity": "sha512-N/WKvghIajmEvXpatSzvTvOIz61ZSmOSa4BRA4pTLi+1+jozquQKP/MkaylP9iB68k73Oua1feLQvH3xQuigiQ=="
}
}
},
"mri": {
@@ -7655,9 +7635,9 @@
}
},
"vscode": {
"version": "npm:@codingame/monaco-vscode-api@1.68.7",
"resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-api/-/monaco-vscode-api-1.68.7.tgz",
"integrity": "sha512-pJ5ukCDNrHh6rgE0GnGWXVWdE9T8UWqM0mju3LfDQ5iP6NjxEQsBmZsb+lEtzPGWwv5y/WWchztMzoW0qF/Z4Q==",
"version": "npm:@codingame/monaco-vscode-api@1.67.20",
"resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-api/-/monaco-vscode-api-1.67.20.tgz",
"integrity": "sha512-3+swJLtpNWmn2hsnVFv/qbLuQLt+FlaDLgcK0PgYwWVIJn2FjO48a0+ke8ZYS/tiqZxJgJSk+y6hdohgZo7n0g==",
"requires": {
"monaco-editor": "^0.33.0"
}
@@ -7668,38 +7648,31 @@
"integrity": "sha512-RY7HwI/ydoC1Wwg4gJ3y6LpU9FJRZAUnTYMXthqhFXXu77ErDd/xkREpGuk4MyYkk4a+XDWAMqe0S3KkelYQEQ=="
},
"vscode-languageclient": {
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-8.0.1.tgz",
"integrity": "sha512-9XoE+HJfaWvu7Y75H3VmLo5WLCtsbxEgEhrLPqwt7eyoR49lUIyyrjb98Yfa50JCMqF2cePJAEVI6oe2o1sIhw==",
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-8.0.2.tgz",
"integrity": "sha512-lHlthJtphG9gibGb/y72CKqQUxwPsMXijJVpHEC2bvbFqxmkj9LwQ3aGU9dwjBLqsX1S4KjShYppLvg1UJDF/Q==",
"requires": {
"minimatch": "^3.0.4",
"semver": "^7.3.5",
"vscode-languageserver-protocol": "3.17.1"
"vscode-languageserver-protocol": "3.17.2"
}
},
"vscode-languageserver-protocol": {
"version": "3.17.1",
"resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.1.tgz",
"integrity": "sha512-BNlAYgQoYwlSgDLJhSG+DeA8G1JyECqRzM2YO6tMmMji3Ad9Mw6AW7vnZMti90qlAKb0LqAlJfSVGEdqMMNzKg==",
"version": "3.17.2",
"resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.2.tgz",
"integrity": "sha512-8kYisQ3z/SQ2kyjlNeQxbkkTNmVFoQCqkmGrzLH6A9ecPlgTbp3wDTnUNqaUxYr4vlAcloxx8zwy7G5WdguYNg==",
"requires": {
"vscode-jsonrpc": "8.0.1",
"vscode-languageserver-types": "3.17.1"
},
"dependencies": {
"vscode-jsonrpc": {
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.1.tgz",
"integrity": "sha512-N/WKvghIajmEvXpatSzvTvOIz61ZSmOSa4BRA4pTLi+1+jozquQKP/MkaylP9iB68k73Oua1feLQvH3xQuigiQ=="
}
"vscode-jsonrpc": "8.0.2",
"vscode-languageserver-types": "3.17.2"
}
},
"vscode-languageserver-textdocument": {
"version": "1.0.5"
},
"vscode-languageserver-types": {
"version": "3.17.1",
"resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.1.tgz",
"integrity": "sha512-K3HqVRPElLZVVPtMeKlsyL9aK0GxGQpvtAUTfX4k7+iJ4mc1M+JM+zQwkgGy2LzY0f0IAafe8MKqIkJrxfGGjQ=="
"version": "3.17.2",
"resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz",
"integrity": "sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA=="
},
"vscode-uri": {
"version": "3.0.3"
+2 -2
View File
@@ -20,7 +20,7 @@
"@sveltejs/kit": "next",
"@tailwindcss/forms": "^0.5.1",
"@tailwindcss/typography": "^0.5.3",
"@types/vscode": "^1.69.0",
"@types/vscode": "~1.67.0",
"@typescript-eslint/eslint-plugin": "^5.31.0",
"@typescript-eslint/parser": "^5.31.0",
"@zerodevx/svelte-toast": "^0.7.2",
@@ -59,7 +59,7 @@
"highlight.js": "^11.5.1",
"monaco-editor": "^0.33.0",
"monaco-editor-workers": "^0.33.0",
"monaco-languageclient": "2.0.2",
"monaco-languageclient": "2.1.0",
"vscode-ws-jsonrpc": "^1.0.2"
}
}
+36 -23
View File
@@ -1,17 +1,28 @@
<script lang="ts">
import { browser, dev } from '$app/env'
import { page } from '$app/stores'
import { buildExtraLib, sendUserToast } from '$lib/utils'
import type monaco from 'monaco-editor'
import { sendUserToast } from '$lib/utils'
import editorWorker from 'monaco-editor/esm/vs/editor/editor.worker?worker'
import jsonWorker from 'monaco-editor/esm/vs/language/json/json.worker?worker'
import tsWorker from 'monaco-editor/esm/vs/language/typescript/ts.worker?worker'
import * as monaco from 'monaco-editor'
import type { DocumentUri, MessageTransports } from 'monaco-languageclient'
import { createEventDispatcher, onDestroy, onMount } from 'svelte'
import { buildWorkerDefinition } from 'monaco-editor-workers'
import { StandaloneServices } from 'vscode/services'
import getMessageServiceOverride from 'vscode/service-override/messages'
StandaloneServices.initialize({
...getMessageServiceOverride(document.body)
})
let divEl: HTMLDivElement | null = null
let editor: monaco.editor.IStandaloneCodeEditor
export let deno = false
export let lang = deno ? 'typescript' : 'python'
export let code: string = ''
@@ -20,12 +31,12 @@
export let formatAction: (() => void) | undefined = undefined
export let automaticLayout = true
export let websocketAlive = { pyright: false, black: false, deno: false }
export let extraLib: string = lang == 'typescript' && !deno ? buildExtraLib() : ''
export let extraLibPath: string = 'file:///node_modules/@types/windmill/index.d.ts'
export let extraLib: string = ''
export let extraLibPath: string = ''
let websockets: WebSocket[] = []
let websocketInterval: NodeJS.Timer | undefined
let lastWsAttempt: Date | undefined
let lastWsAttempt: Date = new Date()
let nbWsAttempt = 0
let uri: string = ''
let disposeMethod: () => void | undefined
@@ -92,14 +103,12 @@
export async function reloadWebsocket() {
closeWebsockets()
if (lang == 'python' || deno) {
// install Monaco language client services
const { MonacoLanguageClient } = await import('monaco-languageclient')
const { CloseAction, ErrorAction } = await import('vscode-languageclient')
const vscode = await import('vscode')
const { toSocket, WebSocketMessageReader, WebSocketMessageWriter } = await import(
'vscode-ws-jsonrpc'
)
const vscode = await import('vscode')
const { RequestType } = await import('vscode-jsonrpc')
@@ -156,18 +165,8 @@
const writer = new WebSocketMessageWriter(socket)
const languageClient = createLanguageClient({ reader, writer }, name, options)
languageClient.start()
lastWsAttempt = undefined
lastWsAttempt = new Date()
nbWsAttempt = 0
reader.onClose(() => {
try {
languageClient.stop()
} catch (err) {
console.error(err)
}
})
socket.onClose((_code, _reason) => {
websocketAlive[name] = false
})
if (name == 'deno') {
vscode.commands.getCommands().then((v) => {
if (!v.includes('deno.cache')) {
@@ -180,6 +179,16 @@
}
})
}
reader.onClose(() => {
try {
languageClient.stop()
} catch (err) {
console.error(err)
}
})
socket.onClose((_code, _reason) => {
websocketAlive[name] = false
})
websocketAlive[name] = true
}
@@ -281,7 +290,6 @@
}
async function loadMonaco() {
const monaco = await import('monaco-editor')
if (lang == 'python') {
monaco.languages.register({
id: 'python',
@@ -303,6 +311,7 @@
}
uri = `file:///${path}`
const model = monaco.editor.createModel(code, lang, monaco.Uri.parse(uri))
model.updateOptions({ tabSize: 4, insertSpaces: true })
editor = monaco.editor.create(divEl as HTMLDivElement, {
model: model,
@@ -365,16 +374,20 @@
noSyntaxValidation: true
})
} else {
monaco.languages.typescript.typescriptDefaults.addExtraLib(extraLib, extraLibPath)
if (extraLib != '' && extraLibPath != '') {
monaco.languages.typescript.typescriptDefaults.addExtraLib(extraLib, extraLibPath)
}
}
}
if (lang == 'python' || deno) {
const { MonacoServices } = await import('monaco-languageclient')
MonacoServices.install()
}
// install Monaco language client services
reloadWebsocket()
reloadWebsocket()
}
return () => {
if (editor) {
@@ -35,6 +35,7 @@
$: shouldPick = mod.value.path === '' && mod.value.language === undefined
$: pickableProperties = getPickableProperties($flowStore?.schema, args, $previewResults, mode, i)
$: extraLib = buildExtraLib(
schemaToTsType($flowStore?.schema),
i === 0 ? schemaToTsType($flowStore?.schema) : objectToTsType($previewResults[i])
)
+2 -2
View File
@@ -272,7 +272,7 @@ export function mapUserToUserExt(user: User): UserExt {
}
}
export function buildExtraLib(previousResultType?: string): string {
export function buildExtraLib(flowInput: string, previousResultType?: string): string {
return `
/**
* get variable (including secret) at path
@@ -297,7 +297,7 @@ export function step(n: number): any;
/**
* flow input as an object
*/
export const flow_input: any;
export const flow_input: ${previousResultType};
/**
* previous result as an object
+1 -1
View File
@@ -26,7 +26,7 @@ const config = {
},
resolve: {
alias: {
path: "path-browserify",
path: "path-browserify"
},
},
};