|
1 | 1 | import React, { ForwardedRef, forwardRef, ReactElement, useEffect, useMemo, useRef, useState } from 'react' |
2 | 2 | import debounce from 'lodash.debounce' |
3 | 3 | import * as monaco from 'monaco-editor' |
4 | | -import { createEditor, getMonacoLanguage, updateEditorKeybindingsMode, registerEditorOpenHandler, createModelReference } from '@codingame/monaco-editor-wrapper' |
| 4 | +import { createEditor, getMonacoLanguage, updateEditorKeybindingsMode, registerEditorOpenHandler, createModelReference, registerFile } from '@codingame/monaco-editor-wrapper' |
5 | 5 | import { IEditorOptions, IResolvedTextEditorModel } from '@codingame/monaco-vscode-editor-service-override' |
6 | 6 | import { DisposableStore, IReference, ITextFileEditorModel } from 'vscode/monaco' |
7 | 7 | import type { ITextFileEditorModelSaveEvent } from 'vscode/vscode/vs/workbench/services/textfile/common/textfiles' |
| 8 | +import { RegisteredMemoryFile } from '@codingame/monaco-vscode-files-service-override' |
8 | 9 | import { useDeepMemo, useLastValueRef, useLastVersion, useThemeColor } from './hooks.js' |
9 | 10 | import './style.js' |
10 | 11 |
|
@@ -212,9 +213,14 @@ function MonacoEditor ({ |
212 | 213 | let model: monaco.editor.ITextModel |
213 | 214 | const disposableStore = new DisposableStore() |
214 | 215 | if (fileUri != null) { |
215 | | - const modelIRefPromise = createModelReference(monaco.Uri.parse(fileUri), value!) |
| 216 | + const uri = monaco.Uri.parse(fileUri) |
| 217 | + |
| 218 | + const fileDisposable = registerFile(new RegisteredMemoryFile(uri, value!)) |
| 219 | + |
| 220 | + const modelIRefPromise = createModelReference(uri) |
216 | 221 | disposableStore.add({ |
217 | 222 | dispose () { |
| 223 | + fileDisposable.dispose() |
218 | 224 | void modelIRefPromise.then(modelIRef => modelIRef.dispose(), console.error) |
219 | 225 | } |
220 | 226 | }) |
|
0 commit comments