import * as monaco from 'monaco-editor/esm/vs/editor/editor.api'; const types = require.context('!!raw-loader!@types/node/', true, /\.d\.ts$/); const diagnosticsOptions: monaco.languages.typescript.DiagnosticsOptions = { noSemanticValidation: false, noSyntaxValidation: false, noSuggestionDiagnostics: true, }; const compilerOptions = { target: monaco.languages.typescript.ScriptTarget.ES2020, module: monaco.languages.typescript.ModuleKind.ESNext, allowNonTsExtensions: true, }; monaco.languages.typescript.javascriptDefaults.setDiagnosticsOptions(diagnosticsOptions); monaco.languages.typescript.typescriptDefaults.setDiagnosticsOptions(diagnosticsOptions); monaco.languages.typescript.javascriptDefaults.setCompilerOptions(compilerOptions); monaco.languages.typescript.typescriptDefaults.setCompilerOptions(compilerOptions); const libSource = [ 'declare function readline(): string;', 'declare function print(content: string): void;', ].join('\n'); const libUri = 'ts:filename/basic.d.ts'; monaco.languages.typescript.javascriptDefaults.addExtraLib(libSource, libUri); monaco.editor.createModel(libSource, 'typescript', monaco.Uri.parse(libUri)); const modules = []; for (const key of types.keys()) { const val = types(key).default.replace('declare var require: NodeRequire;', ''); if (val.includes('declare module ')) { modules.push(val.toString().split('declare module \'')[1].split('\'')[0]); } const uri = `ts:node/${key.split('./')[1]}`; monaco.languages.typescript.javascriptDefaults.addExtraLib(val, uri); monaco.editor.createModel(val, 'typescript', monaco.Uri.parse(uri)); } let val = 'declare var require:'; for (const m of modules) val += `((id:'${m}')=>(typeof import('${m}')))&`; val += '((id:string)=>any)'; monaco.languages.typescript.javascriptDefaults.addExtraLib(val, 'ts:node/require.d.ts'); monaco.editor.createModel(val, 'typescript', monaco.Uri.parse('ts:node/require.d.ts'));