mirror of
https://github.com/windmill-labs/windmill.git
synced 2026-08-18 16:02:10 +00:00
fix: avoid monaco memory leak
This commit is contained in:
@@ -115,7 +115,7 @@
|
||||
import { workspaceStore } from '$lib/stores'
|
||||
import { type Preview, ResourceService, UserService } from '$lib/gen'
|
||||
import type { Text } from 'yjs'
|
||||
import { initializeVscode } from '$lib/components/vscode'
|
||||
import { initializeVscode, keepModelAroundToAvoidDisposalOfWorkers } from '$lib/components/vscode'
|
||||
|
||||
import { initializeMode } from 'monaco-graphql/esm/initializeMode.js'
|
||||
import type { MonacoGraphQLAPI } from 'monaco-graphql/esm/api.js'
|
||||
@@ -1266,6 +1266,8 @@
|
||||
folding
|
||||
})
|
||||
|
||||
keepModelAroundToAvoidDisposalOfWorkers()
|
||||
|
||||
// updateEditorKeybindingsMode(editor, 'vim', undefined)
|
||||
|
||||
let ataModel: NodeJS.Timeout | undefined = undefined
|
||||
@@ -1355,6 +1357,7 @@
|
||||
try {
|
||||
closeWebsockets()
|
||||
vimDisposable?.dispose()
|
||||
console.log('disposing editor', editor, model)
|
||||
model?.dispose()
|
||||
editor && editor.dispose()
|
||||
console.log('disposed editor')
|
||||
|
||||
@@ -7,6 +7,16 @@
|
||||
import '@codingame/monaco-vscode-standalone-css-language-features'
|
||||
import '@codingame/monaco-vscode-standalone-typescript-language-features'
|
||||
import '@codingame/monaco-vscode-standalone-html-language-features'
|
||||
import {
|
||||
editor as meditor,
|
||||
KeyCode,
|
||||
KeyMod,
|
||||
Uri as mUri,
|
||||
languages,
|
||||
type IRange,
|
||||
type IDisposable
|
||||
} from 'monaco-editor'
|
||||
|
||||
languages.typescript.javascriptDefaults.setCompilerOptions({
|
||||
target: languages.typescript.ScriptTarget.Latest,
|
||||
allowNonTsExtensions: true,
|
||||
@@ -44,15 +54,15 @@
|
||||
import { BROWSER } from 'esm-env'
|
||||
|
||||
import { createHash, editorConfig, langToExt, updateOptions } from '$lib/editorUtils'
|
||||
import {
|
||||
editor as meditor,
|
||||
KeyCode,
|
||||
KeyMod,
|
||||
Uri as mUri,
|
||||
languages,
|
||||
type IRange,
|
||||
type IDisposable
|
||||
} from 'monaco-editor'
|
||||
// import {
|
||||
// editor as meditor,
|
||||
// KeyCode,
|
||||
// KeyMod,
|
||||
// Uri as mUri,
|
||||
// languages,
|
||||
// type IRange,
|
||||
// type IDisposable
|
||||
// } from 'monaco-editor'
|
||||
|
||||
import { allClasses } from './apps/editor/componentsPanel/cssUtils'
|
||||
|
||||
@@ -60,7 +70,7 @@
|
||||
|
||||
import libStdContent from '$lib/es6.d.ts.txt?raw'
|
||||
import domContent from '$lib/dom.d.ts.txt?raw'
|
||||
import { initializeVscode } from './vscode'
|
||||
import { initializeVscode, keepModelAroundToAvoidDisposalOfWorkers } from './vscode'
|
||||
import EditorTheme from './EditorTheme.svelte'
|
||||
import { vimMode } from '$lib/stores'
|
||||
import { initVim } from './monaco_keybindings'
|
||||
@@ -348,6 +358,7 @@
|
||||
snippetsPreventQuickSuggestions: disableSuggestions
|
||||
}
|
||||
})
|
||||
keepModelAroundToAvoidDisposalOfWorkers()
|
||||
|
||||
let timeoutModel: NodeJS.Timeout | undefined = undefined
|
||||
editor.onDidChangeModelContent((event) => {
|
||||
|
||||
@@ -1,3 +1,21 @@
|
||||
<script module>
|
||||
import '@codingame/monaco-vscode-standalone-typescript-language-features'
|
||||
|
||||
languages.typescript.javascriptDefaults.setCompilerOptions({
|
||||
target: languages.typescript.ScriptTarget.Latest,
|
||||
allowNonTsExtensions: true,
|
||||
noSemanticValidation: false,
|
||||
noLib: true,
|
||||
moduleResolution: languages.typescript.ModuleResolutionKind.NodeJs
|
||||
})
|
||||
languages.typescript.javascriptDefaults.setDiagnosticsOptions({
|
||||
noSemanticValidation: false,
|
||||
noSyntaxValidation: false,
|
||||
noSuggestionDiagnostics: false,
|
||||
diagnosticCodesToIgnore: [1108]
|
||||
})
|
||||
</script>
|
||||
|
||||
<script lang="ts">
|
||||
import { BROWSER } from 'esm-env'
|
||||
import {
|
||||
@@ -422,20 +440,6 @@
|
||||
await initializeVscode('templateEditor')
|
||||
console.log('initialized')
|
||||
initialized = true
|
||||
languages.typescript.javascriptDefaults.setCompilerOptions({
|
||||
target: languages.typescript.ScriptTarget.Latest,
|
||||
allowNonTsExtensions: true,
|
||||
noSemanticValidation: false,
|
||||
noLib: true,
|
||||
moduleResolution: languages.typescript.ModuleResolutionKind.NodeJs
|
||||
})
|
||||
|
||||
languages.typescript.javascriptDefaults.setDiagnosticsOptions({
|
||||
noSemanticValidation: false,
|
||||
noSyntaxValidation: false,
|
||||
noSuggestionDiagnostics: false,
|
||||
diagnosticCodesToIgnore: [1108]
|
||||
})
|
||||
|
||||
languages.register({ id: 'template' })
|
||||
|
||||
|
||||
@@ -161,15 +161,15 @@ export class Autocompletor {
|
||||
modifiedCode: string = ''
|
||||
applyZone:
|
||||
| {
|
||||
startLineNumber: number
|
||||
endLineNumber: number
|
||||
}
|
||||
startLineNumber: number
|
||||
endLineNumber: number
|
||||
}
|
||||
| undefined = undefined
|
||||
lastChangePosition:
|
||||
| {
|
||||
lineNumber: number
|
||||
column: number
|
||||
}
|
||||
lineNumber: number
|
||||
column: number
|
||||
}
|
||||
| undefined = undefined
|
||||
|
||||
abortController: AbortController | undefined = undefined
|
||||
@@ -180,12 +180,12 @@ export class Autocompletor {
|
||||
|
||||
predictedChange:
|
||||
| {
|
||||
position: {
|
||||
lineNumber: number
|
||||
column: number
|
||||
}
|
||||
distance: number
|
||||
}
|
||||
position: {
|
||||
lineNumber: number
|
||||
column: number
|
||||
}
|
||||
distance: number
|
||||
}
|
||||
| undefined = undefined
|
||||
tabWidget: meditor.IContentWidget | undefined = undefined
|
||||
|
||||
@@ -240,18 +240,18 @@ export class Autocompletor {
|
||||
|
||||
let closestPosition:
|
||||
| {
|
||||
lineNumber: number
|
||||
column: number
|
||||
}
|
||||
lineNumber: number
|
||||
column: number
|
||||
}
|
||||
| undefined = undefined
|
||||
let closestDistance = Infinity
|
||||
for (const change of this.visualChanges) {
|
||||
if (change.type === 'deleted') {
|
||||
const distance = Math.min(
|
||||
Math.abs(change.range.startLine - position.lineNumber) +
|
||||
Math.abs(change.range.startColumn - position.column) / 10000,
|
||||
Math.abs(change.range.startColumn - position.column) / 10000,
|
||||
Math.abs(change.range.endLine - position.lineNumber) +
|
||||
Math.abs(change.range.endColumn - position.column) / 10000
|
||||
Math.abs(change.range.endColumn - position.column) / 10000
|
||||
)
|
||||
if (distance < closestDistance) {
|
||||
closestDistance = distance
|
||||
|
||||
@@ -4,7 +4,7 @@ import { initServices } from 'monaco-languageclient/vscode/services'
|
||||
import getMonarchServiceOverride from '@codingame/monaco-vscode-monarch-service-override'
|
||||
import '@codingame/monaco-vscode-standalone-typescript-language-features'
|
||||
import getConfigurationServiceOverride from '@codingame/monaco-vscode-configuration-service-override'
|
||||
import { editor as meditor } from 'monaco-editor/esm/vs/editor/editor.api'
|
||||
import { editor as meditor, Uri as mUri } from 'monaco-editor'
|
||||
|
||||
export let isInitialized = false
|
||||
export let isInitializing = false
|
||||
@@ -267,3 +267,10 @@ export async function initializeVscode(caller?: string, htmlContainer?: HTMLElem
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export function keepModelAroundToAvoidDisposalOfWorkers() {
|
||||
const keepEditorUri = mUri.parse('file:///avoidDisposalOfWorkers')
|
||||
if (!meditor?.getModel(keepEditorUri)) {
|
||||
meditor.createModel('', 'typescript', keepEditorUri)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user