lukasbach / monaco-editor-auto-typings

Automatically load declaration files while typing in monaco editor instances
https://lukasbach.github.io/monaco-editor-auto-typings/
MIT License
177 stars 39 forks source link

Uncaught (in promise) Error: Could not find source file: 'inmemory://model/node_modules #16

Open dolanmiu opened 2 years ago

dolanmiu commented 2 years ago

image

tsMode.js:8 Uncaught (in promise) Error: Could not find source file: 'inmemory://model/node_modules/react/package.json'.
    at Ve (tsWorker.js:254:8493)
    at Object.In [as getSyntacticDiagnostics] (tsWorker.js:254:13367)
    at Nm.getSyntacticDiagnostics (tsWorker.js:33954:2433)
    at y.fmr (workerMain.js:17:33335)
    at a._handleMessage (workerMain.js:13:97450)
    at Object.handleMessage (workerMain.js:13:97075)
    at C._handleRequestMessage (workerMain.js:13:93890)
    at C._handleMessage (workerMain.js:13:93344)
    at C.handleMessage (workerMain.js:13:93232)
    at a.onmessage (workerMain.js:13:97167)

I can see the models are there, but probably not attached to the editor or something?

image

image

lukasbach commented 2 years ago

Hello @dolanmiu, thank you for your report. Can you share the code you put into monaco, and the code that you used to mount monaco and attach the auto-typings plugin?

dolanmiu commented 2 years ago

Very simple, but I pass my own version of monaco

const model = monaco.editor.createModel('', 'typescript', monaco.Uri.parse('inmemory://model/widget.tsx'));
model.updateOptions({ tabSize: 2 });
this.editor = monaco.editor.create(this.editorContainer.nativeElement, {
  model,
  language: 'typescript',
  theme: 'vs-dark',
  automaticLayout: true,
});

monaco.languages.typescript.typescriptDefaults.setCompilerOptions({
  ...monaco.languages.typescript.typescriptDefaults.getCompilerOptions(),
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
  jsx: 'react' as any,
  lib: ['dom', 'esnext'],
});

 this.autoTypings = await AutoTypings.create(this.editor, {
      monaco,
      sourceCache: storage, // Cache loaded sources in localStorage. May be omitted
      onUpdate: (u, t) => {
        if (u.type === 'StoredToCache' || u.type === 'LoadedFromCache') {
          for (const origin of CONSUMER_SPA_ORIGINS) {
            this.window.postMessage([t], origin);
          }
        }
      },
      onError: (e) => {
        for (const origin of CONSUMER_SPA_ORIGINS) {
          this.window.postMessage([e], origin);
        }
      },
    });
lukasbach commented 2 years ago

Can you try to add the following to the compiler options:

moduleResolution: options.monaco.languages.typescript.ModuleResolutionKind.NodeJs,
allowSyntheticDefaultImports: true,
rootDir: options.fileRootPath,

and if you're not already doing that, maybe also try importing AutoTypings from monaco-editor-auto-typings/custom-editor rather from monaco-editor-auto-typings directly.

adnanjpg commented 1 year ago

Can you try to add the following to the compiler options:

moduleResolution: options.monaco.languages.typescript.ModuleResolutionKind.NodeJs,
allowSyntheticDefaultImports: true,
rootDir: options.fileRootPath,

and if you're not already doing that, maybe also try importing AutoTypings from monaco-editor-auto-typings/custom-editor rather from monaco-editor-auto-typings directly.

applying these steps fixed it for me, without specifying rootDir as I'm not sure where its value would come from.