UNPKG

eslint-plugin-mdx

Version:
86 lines 2.82 kB
import path from 'path'; import { cosmiconfigSync } from 'cosmiconfig'; import { arrayify } from 'eslint-mdx'; import remarkMdx from 'remark-mdx'; import remarkParse from 'remark-parse'; import remarkStringify from 'remark-stringify'; import unified from 'unified'; export const requirePkg = (plugin, prefix, filePath) => { if (filePath && /^\.\.?([/\\]|$)/.test(plugin)) { plugin = path.resolve(path.dirname(filePath), plugin); } prefix = prefix.endsWith('-') ? prefix : prefix + '-'; const packages = [ plugin, plugin.startsWith('@') ? plugin.replace('/', '/' + prefix) : prefix + plugin, ]; let error; for (const pkg of packages) { try { // eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires return require(pkg); } catch (err) { if (!error) { error = err; } } } throw error; }; let searchSync; export const remarkProcessor = unified().use(remarkParse).freeze(); export const getRemarkProcessor = (searchFrom, isMdx) => { if (!searchSync) { searchSync = cosmiconfigSync('remark', { packageProp: 'remarkConfig', }).search; } let result; try { result = searchSync(searchFrom); } catch (err) { // https://github.com/eslint/eslint/issues/11989 /* istanbul ignore if */ if (err.code !== 'ENOTDIR' || !/\d+_?\.[a-z]+$/.test(searchFrom)) { throw err; } try { result = searchSync(path.dirname(searchFrom)); } catch (_a) { /* istanbul ignore next */ throw err; } } /* istanbul ignore next */ const { plugins = [], settings } = ((result === null || result === void 0 ? void 0 : result.config) || {}); try { // disable this rule automatically since we already have a parser option `extensions` // eslint-disable-next-line node/no-extraneous-require plugins.push([require.resolve('remark-lint-file-extension'), false]); } catch (_b) { // just ignore if the package does not exist } const initProcessor = remarkProcessor().use({ settings }).use(remarkStringify); if (isMdx) { initProcessor.use(remarkMdx); } return plugins .reduce((processor, pluginWithSettings) => { const [plugin, ...pluginSettings] = arrayify(pluginWithSettings); return processor.use( /* istanbul ignore next */ typeof plugin === 'string' ? requirePkg(plugin, 'remark', result.filepath) : plugin, ...pluginSettings); }, initProcessor) .freeze(); }; //# sourceMappingURL=helpers.js.map