UNPKG

eslint-mdx

Version:
63 lines 2.26 kB
import path from 'node:path'; import { arrayify, normalizePosition, getPhysicalFilename } from './helpers.js'; import { performSyncWork } from './sync.js'; export const DEFAULT_EXTENSIONS = ['.mdx']; export const MARKDOWN_EXTENSIONS = ['.md']; export class Parser { constructor() { this.parse = this.parse.bind(this); this.parseForESLint = this.parseForESLint.bind(this); } parse(code, options) { return this.parseForESLint(code, options).ast; } parseForESLint(code, { filePath, sourceType, ignoreRemarkConfig, remarkConfigPath, extensions, markdownExtensions, }) { const extname = path.extname(filePath); const isMdx = [...DEFAULT_EXTENSIONS, ...arrayify(extensions)].includes(extname); const isMarkdown = [ ...MARKDOWN_EXTENSIONS, ...arrayify(markdownExtensions), ].includes(extname); if (!isMdx && !isMarkdown) { throw new Error('Unsupported file extension, make sure setting the `extensions` or `markdownExtensions` option correctly.'); } let result; try { result = performSyncWork({ filePath: getPhysicalFilename(filePath), code, isMdx, ignoreRemarkConfig, remarkConfigPath, }); } catch (err) { if (process.argv.includes('--debug')) { console.error(err); } const { message, line, column, place } = err; const point = place && ('start' in place ? place.start : place); throw Object.assign(new SyntaxError(message, { cause: err, }), { lineNumber: line, column, index: point?.offset, }); } const { root, body, comments, tokens } = result; return { ast: { ...normalizePosition(root.position), type: 'Program', sourceType, body, comments, tokens, }, }; } } export const parser = new Parser(); export const { parse, parseForESLint } = parser; //# sourceMappingURL=parser.js.map