import AJV from 'ajv'; import { relative } from 'path'; import slash from 'slash2'; import schema from './schema'; import { IConfig } from './types'; import { getExistFile } from './utils'; export const CONFIG_FILES = [ 'lotus-lint.config.js', 'lotus-lint.config.ts' ]; function testDefault(obj) { return obj.default || obj; } function getUserConfig( { cwd } ): IConfig { const configFile = getExistFile({ cwd, files: CONFIG_FILES, returnRelative: false, }); if (configFile) { const userConfig = testDefault(require(configFile)); const ajv = new AJV({ allErrors: true }); const validate = ajv.compile(schema); const isValid = validate(schema); if (!isValid) { const errors = ajv.errors.map(({ dataPath, message }, index) => { return `${index + 1}. ${dataPath}${dataPath ? ' ' : ''}${message}`; }); throw new Error( `Invalid options in ${slash(relative(cwd, configFile))} ${errors.join('\n')}`.trim(), ); } return userConfig; } return {}; } export default getUserConfig