-
Hi there, would like some assistance in creating a model ref. Based on some previous discussion I was able to make this example but I thin I'm missing some service override, I'm getting this error: This this my full code is solidjs: import { initialize } from "vscode/services";
import * as monaco from "monaco-editor";
import * as vscode from "vscode";
import getEditorServiceOverride from "@codingame/monaco-vscode-editor-service-override";
import getLanguageServiceOverride from "@codingame/monaco-vscode-languages-service-override";
import getTextmateServiceOverride from "@codingame/monaco-vscode-textmate-service-override";
import getThemeServceOverride from "@codingame/monaco-vscode-theme-service-override";
import getModelServiceOverride from "@codingame/monaco-vscode-model-service-override";
import getLanguageDetectionWorkerServiceOverride from "@codingame/monaco-vscode-language-detection-worker-service-override";
import {
RegisteredFileSystemProvider,
RegisteredMemoryFile,
registerFileSystemOverlay,
} from "@codingame/monaco-vscode-files-service-override";
import "@codingame/monaco-vscode-json-default-extension";
import { createEffect, onCleanup } from "solid-js";
export type WorkerLoader = () => Worker;
function App() {
createEffect(async () => {
const workerLoaders: Partial<Record<string, WorkerLoader>> = {
editorWorkerService: () =>
new Worker(
new URL(
"monaco-editor/esm/vs/editor/editor.worker.js",
import.meta.url,
),
{ type: "module" },
),
};
window.MonacoEnvironment = {
getWorker: function (moduleId, label) {
const workerFactory = workerLoaders[label];
if (workerFactory != null) {
return workerFactory();
}
throw new Error(`Unimplemented worker ${label} (${moduleId})`);
},
};
const fileSystemProvider = new RegisteredFileSystemProvider(false);
fileSystemProvider.registerFile(
new RegisteredMemoryFile(
vscode.Uri.file("/tmp/test.js"),
`// import anotherfile
let variable = 1
function inc () {
variable++
}
while (variable < 5000) {
inc()
console.log('Hello world', variable);
}`,
),
);
registerFileSystemOverlay(1, fileSystemProvider);
// Call it once before doing anything else
await initialize({
...getEditorServiceOverride(),
...getTextmateServiceOverride(),
...getModelServiceOverride(),
...getThemeServceOverride(),
...getLanguageServiceOverride(),
...getLanguageDetectionWorkerServiceOverride(),
});
const modelRef = await monaco.editor.createModelReference(
monaco.Uri.parse("file:///tmp/test.js"),
JSON.stringify({ hello: "world" }, null, 2),
);
const editor = monaco.editor.create(document.getElementById("editor")!, {
language: "json",
model: modelRef.object.textEditorModel,
});
registerFileSystemOverlay(1, fileSystemProvider);
onCleanup(() => {
modelRef.dispose();
editor.dispose();
});
});
return <div id="editor"></div>;
}
export default App; |
Beta Was this translation helpful? Give feedback.
Replies: 2 comments 15 replies
-
I've just tried your code (with just a little changes): import { initialize } from "vscode/services";
import * as monaco from "monaco-editor";
import * as vscode from "vscode";
import getEditorServiceOverride from "@codingame/monaco-vscode-editor-service-override";
import getLanguageServiceOverride from "@codingame/monaco-vscode-languages-service-override";
import getTextmateServiceOverride from "@codingame/monaco-vscode-textmate-service-override";
import getThemeServceOverride from "@codingame/monaco-vscode-theme-service-override";
import getModelServiceOverride from "@codingame/monaco-vscode-model-service-override";
import getLanguageDetectionWorkerServiceOverride from "@codingame/monaco-vscode-language-detection-worker-service-override";
import {
RegisteredFileSystemProvider,
RegisteredMemoryFile,
registerFileSystemOverlay,
} from "@codingame/monaco-vscode-files-service-override";
import "@codingame/monaco-vscode-json-default-extension";
export type WorkerLoader = () => Worker;
const workerLoaders: Partial<Record<string, WorkerLoader>> = {
editorWorkerService: () =>
new Worker(
new URL(
"monaco-editor/esm/vs/editor/editor.worker.js",
import.meta.url,
),
{ type: "module" },
),
};
window.MonacoEnvironment = {
getWorker: function (moduleId, label) {
const workerFactory = workerLoaders[label];
if (workerFactory != null) {
return workerFactory();
}
throw new Error(`Unimplemented worker ${label} (${moduleId})`);
},
};
const fileSystemProvider = new RegisteredFileSystemProvider(false);
fileSystemProvider.registerFile(
new RegisteredMemoryFile(
vscode.Uri.file("/tmp/test.js"),
`// import anotherfile
let variable = 1
function inc () {
variable++
}
while (variable < 5000) {
inc()
console.log('Hello world', variable);
}`,
),
);
registerFileSystemOverlay(1, fileSystemProvider);
// Call it once before doing anything else
await initialize({
...getEditorServiceOverride(async () => {
return undefined
}),
...getTextmateServiceOverride(),
...getModelServiceOverride(),
...getThemeServceOverride(),
...getLanguageServiceOverride(),
...getLanguageDetectionWorkerServiceOverride(),
});
const modelRef = await monaco.editor.createModelReference(
monaco.Uri.parse("file:///tmp/test.js")
);
monaco.editor.create(document.getElementById("editor")!, {
language: "json",
model: modelRef.object.textEditorModel,
}); and I'm unable to reproduce any issue, can your please provide a reproduction repo? |
Beta Was this translation helpful? Give feedback.
-
It looks like the issue occurs when packages are installed from different versions, once I've deleted pnpm-lock.yaml and did a clean install it works, I had some packages from 6.0.0, some 6.0.1 and some 6.0.2, once they were all in sync it worked. Again appreciate the help and thanks for this amazing project. God bless. |
Beta Was this translation helpful? Give feedback.
It looks like the issue occurs when packages are installed from different versions, once I've deleted pnpm-lock.yaml and did a clean install it works, I had some packages from 6.0.0, some 6.0.1 and some 6.0.2, once they were all in sync it worked.
Again appreciate the help and thanks for this amazing project. God bless.