@sap/eslint-plugin-cds
Version:
ESLint plugin including recommended SAP Cloud Application Programming model and environment rules
27 lines (20 loc) • 1.05 kB
JavaScript
const { globalCache } = require('../utils/Cache')
const createRule = require('../utils/createRule')
const fs = require('node:fs')
const path = require('node:path')
/**
* @param {string} dir - directory to read rules from
* @param {(module: NodeJS.Module) => unknown} post - post processing function
* @returns {Record<string, () => NodeJS.Module>}
*/
const readRulesFromDir = (dir, post) => Object.fromEntries(fs.readdirSync(path.join(__dirname, dir))
.filter(entry => entry.endsWith('.js') && !entry.includes('index')) // only js files
.map(file => [path.parse(file).name, require(['.', dir, file].join('/'))])
.filter(([,module]) => Object.hasOwn(module, 'create')) // create() is required to exist on top level by eslint -> good check to find actual rules
.map(([file, module]) => [file, () => post(module)]))
const cdsRules = readRulesFromDir('.', createRule)
const jsRules = readRulesFromDir('js', module => module)
const rules = {...cdsRules, ...jsRules}
globalCache.set('rules', rules)
module.exports = rules