eslint-rule-benchmark
Version:
Benchmark ESLint rules with detailed performance metrics for CI and plugin development
58 lines (57 loc) • 1.59 kB
JavaScript
const LANGUAGE_PARSER_MAP = {
'typescript-react': '@typescript-eslint/parser',
typescript: '@typescript-eslint/parser',
svelte: 'svelte-eslint-parser',
astro: 'astro-eslint-parser',
vue: 'vue-eslint-parser',
'javascript-react': null,
javascript: null,
}
async function loadLanguageParser(jiti, language) {
let result = {}
let parserName = LANGUAGE_PARSER_MAP[language]
if (!parserName) {
return { parser: null }
}
try {
let moduleExport = await jiti.import(parserName)
result.parser = extractParser(moduleExport)
if (!result.parser) {
result.error = `Parser not found in module: ${parserName}`
}
} catch (error) {
let errorValue = error
result.error = errorValue.message
}
return result
}
function extractParser(moduleExport) {
if (
moduleExport &&
typeof moduleExport === 'object' &&
(('parse' in moduleExport && typeof moduleExport.parse === 'function') ||
('parseForESLint' in moduleExport &&
typeof moduleExport.parseForESLint === 'function'))
) {
return moduleExport
}
if (
moduleExport &&
typeof moduleExport === 'object' &&
'default' in moduleExport
) {
let defaultExport = moduleExport.default
if (
defaultExport &&
typeof defaultExport === 'object' &&
(('parse' in defaultExport &&
typeof defaultExport.parse === 'function') ||
('parseForESLint' in defaultExport &&
typeof defaultExport.parseForESLint === 'function'))
) {
return defaultExport
}
}
return void 0
}
export { loadLanguageParser }