2024-09-24 13:00:49 +01:00
|
|
|
import * as monaco from "monaco-editor"
|
|
|
|
|
|
|
|
export function parseTSConfigToMonacoOptions(
|
|
|
|
tsconfig: any
|
|
|
|
): monaco.languages.typescript.CompilerOptions {
|
|
|
|
const compilerOptions: monaco.languages.typescript.CompilerOptions = {}
|
|
|
|
|
|
|
|
// Map tsconfig options to Monaco CompilerOptions
|
|
|
|
if (tsconfig.strict) compilerOptions.strict = tsconfig.strict
|
|
|
|
if (tsconfig.target) compilerOptions.target = mapScriptTarget(tsconfig.target)
|
|
|
|
if (tsconfig.module) compilerOptions.module = mapModule(tsconfig.module)
|
|
|
|
if (tsconfig.lib) compilerOptions.lib = tsconfig.lib
|
|
|
|
if (tsconfig.allowJs) compilerOptions.allowJs = tsconfig.allowJs
|
|
|
|
if (tsconfig.checkJs) compilerOptions.checkJs = tsconfig.checkJs
|
|
|
|
if (tsconfig.jsx) compilerOptions.jsx = mapJSX(tsconfig.jsx)
|
|
|
|
if (tsconfig.declaration) compilerOptions.declaration = tsconfig.declaration
|
|
|
|
if (tsconfig.declarationMap)
|
|
|
|
compilerOptions.declarationMap = tsconfig.declarationMap
|
|
|
|
if (tsconfig.sourceMap) compilerOptions.sourceMap = tsconfig.sourceMap
|
|
|
|
if (tsconfig.outFile) compilerOptions.outFile = tsconfig.outFile
|
|
|
|
if (tsconfig.outDir) compilerOptions.outDir = tsconfig.outDir
|
|
|
|
if (tsconfig.removeComments)
|
|
|
|
compilerOptions.removeComments = tsconfig.removeComments
|
|
|
|
if (tsconfig.noEmit) compilerOptions.noEmit = tsconfig.noEmit
|
|
|
|
if (tsconfig.noEmitOnError)
|
|
|
|
compilerOptions.noEmitOnError = tsconfig.noEmitOnError
|
|
|
|
|
|
|
|
return compilerOptions
|
|
|
|
}
|
|
|
|
|
|
|
|
function mapScriptTarget(
|
|
|
|
target: string
|
|
|
|
): monaco.languages.typescript.ScriptTarget {
|
|
|
|
const targetMap: { [key: string]: monaco.languages.typescript.ScriptTarget } =
|
|
|
|
{
|
|
|
|
es3: monaco.languages.typescript.ScriptTarget.ES3,
|
|
|
|
es5: monaco.languages.typescript.ScriptTarget.ES5,
|
|
|
|
es6: monaco.languages.typescript.ScriptTarget.ES2015,
|
|
|
|
es2015: monaco.languages.typescript.ScriptTarget.ES2015,
|
|
|
|
es2016: monaco.languages.typescript.ScriptTarget.ES2016,
|
|
|
|
es2017: monaco.languages.typescript.ScriptTarget.ES2017,
|
|
|
|
es2018: monaco.languages.typescript.ScriptTarget.ES2018,
|
|
|
|
es2019: monaco.languages.typescript.ScriptTarget.ES2019,
|
|
|
|
es2020: monaco.languages.typescript.ScriptTarget.ES2020,
|
|
|
|
esnext: monaco.languages.typescript.ScriptTarget.ESNext,
|
|
|
|
}
|
|
|
|
if (typeof target !== "string") {
|
|
|
|
return monaco.languages.typescript.ScriptTarget.Latest
|
|
|
|
}
|
|
|
|
return (
|
|
|
|
targetMap[target?.toLowerCase()] ||
|
|
|
|
monaco.languages.typescript.ScriptTarget.Latest
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
function mapModule(module: string): monaco.languages.typescript.ModuleKind {
|
|
|
|
const moduleMap: { [key: string]: monaco.languages.typescript.ModuleKind } = {
|
|
|
|
none: monaco.languages.typescript.ModuleKind.None,
|
|
|
|
commonjs: monaco.languages.typescript.ModuleKind.CommonJS,
|
|
|
|
amd: monaco.languages.typescript.ModuleKind.AMD,
|
|
|
|
umd: monaco.languages.typescript.ModuleKind.UMD,
|
|
|
|
system: monaco.languages.typescript.ModuleKind.System,
|
|
|
|
es6: monaco.languages.typescript.ModuleKind.ES2015,
|
|
|
|
es2015: monaco.languages.typescript.ModuleKind.ES2015,
|
|
|
|
esnext: monaco.languages.typescript.ModuleKind.ESNext,
|
|
|
|
}
|
|
|
|
if (typeof module !== "string") {
|
|
|
|
return monaco.languages.typescript.ModuleKind.ESNext
|
|
|
|
}
|
|
|
|
return (
|
|
|
|
moduleMap[module.toLowerCase()] ||
|
|
|
|
monaco.languages.typescript.ModuleKind.ESNext
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
2024-10-27 14:20:39 -04:00
|
|
|
function mapJSX(jsx: string | undefined): monaco.languages.typescript.JsxEmit {
|
|
|
|
if (!jsx || typeof jsx !== 'string') {
|
|
|
|
return monaco.languages.typescript.JsxEmit.React // Default value
|
|
|
|
}
|
|
|
|
|
2024-09-24 13:00:49 +01:00
|
|
|
const jsxMap: { [key: string]: monaco.languages.typescript.JsxEmit } = {
|
|
|
|
preserve: monaco.languages.typescript.JsxEmit.Preserve,
|
|
|
|
react: monaco.languages.typescript.JsxEmit.React,
|
|
|
|
"react-native": monaco.languages.typescript.JsxEmit.ReactNative,
|
|
|
|
}
|
|
|
|
return jsxMap[jsx.toLowerCase()] || monaco.languages.typescript.JsxEmit.React
|
|
|
|
}
|
|
|
|
|
|
|
|
// Example usage:
|
|
|
|
const tsconfigJSON = {
|
|
|
|
compilerOptions: {
|
|
|
|
strict: true,
|
|
|
|
target: "ES2020",
|
|
|
|
module: "ESNext",
|
|
|
|
lib: ["DOM", "ES2020"],
|
|
|
|
jsx: "react",
|
|
|
|
sourceMap: true,
|
|
|
|
outDir: "./dist",
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
const monacoOptions = parseTSConfigToMonacoOptions(tsconfigJSON.compilerOptions)
|
|
|
|
console.log(monacoOptions)
|