UNPKG

@mdx-js/typescript-plugin

Version:

A TypeScript plugin to support language features in MDX files

81 lines (66 loc) 2.12 kB
'use strict' /** * @import {TsConfigSourceFile} from 'typescript' */ const {createRequire} = require('node:module') const { createMdxLanguagePlugin, resolvePlugins } = require('@mdx-js/language-service') const { createLanguageServicePlugin } = require('@volar/typescript/lib/quickstart/createLanguageServicePlugin.js') const {default: remarkFrontmatter} = require('remark-frontmatter') const {default: remarkGfm} = require('remark-gfm') const plugin = createLanguageServicePlugin((ts, info) => { const {getAllProjectErrors} = info.project // Filter out the message “No inputs were found in config file …” if the // project contains MDX files. info.project.getAllProjectErrors = () => { const diagnostics = getAllProjectErrors.call(info.project) const fileNames = info.project.getFileNames(true, true) const hasMdx = fileNames.some((fileName) => fileName.endsWith('.mdx')) if (hasMdx) { diagnostics.filter((diagnostic) => diagnostic.code !== 18_003) } return diagnostics } if (info.project.projectKind !== ts.server.ProjectKind.Configured) { return { languagePlugins: [ createMdxLanguagePlugin([ [remarkFrontmatter, ['toml', 'yaml']], remarkGfm ]) ] } } const cwd = info.project.getCurrentDirectory() // eslint-disable-next-line prefer-destructuring const configFile = /** @type {TsConfigSourceFile} */ ( info.project.getCompilerOptions().configFile ) const commandLine = ts.parseJsonSourceFileConfigFileContent( configFile, ts.sys, cwd, undefined, configFile.fileName ) const require = createRequire(configFile.fileName) const [remarkPlugins, virtualCodePlugins] = resolvePlugins( commandLine.raw?.mdx, (name) => require(name).default ) return { languagePlugins: [ createMdxLanguagePlugin( remarkPlugins || [[remarkFrontmatter, ['toml', 'yaml']], remarkGfm], virtualCodePlugins, Boolean(commandLine.raw?.mdx?.checkMdx), commandLine.options.jsxImportSource ) ] } }) module.exports = plugin