@alauda/doom
Version:
Doctor Doom making docs.
96 lines (95 loc) • 3.08 kB
JavaScript
import { createRequire } from 'node:module';
import { fileURLToPath } from 'node:url';
import cspellRecommended from '@cspell/eslint-plugin/recommended';
import js from '@eslint/js';
import react from '@eslint-react/eslint-plugin';
import { merge } from 'es-toolkit/compat';
import * as mdx from 'eslint-plugin-mdx';
import globals from 'globals';
import tseslint from 'typescript-eslint';
import { loadConfig } from './cli/load-config.js';
const cjsRequire = createRequire(import.meta.url);
let remarkConfigPath;
try {
remarkConfigPath = fileURLToPath(import.meta.resolve('./remarkrc.js'));
}
catch {
remarkConfigPath = cjsRequire.resolve('./remarkrc.js');
}
async function doom(cspellOptionsOrRoot) {
let cspellOptions;
if (typeof cspellOptionsOrRoot === 'string' ||
cspellOptionsOrRoot instanceof URL) {
const { config } = await loadConfig(cspellOptionsOrRoot);
cspellOptions = config.lint?.cspellOptions;
}
else {
cspellOptions = cspellOptionsOrRoot;
}
const cspellEnabled = cspellOptions !== null;
return tseslint.config([
{
ignores: ['**/.yarn', '**/dist', '**/lib', '**/node_modules'],
},
{
...mdx.configs.flat,
rules: {
...mdx.configs.flat.rules,
'mdx/remark': 'error',
},
},
{
extends: [js.configs.recommended, react.configs.recommended],
languageOptions: {
globals: globals.node,
},
},
{
files: ['**/en/**/*.{js,jsx,md,mdx,ts,tsx}'],
extends: cspellEnabled ? [cspellRecommended] : [],
languageOptions: {
globals: globals.browser,
parserOptions: {
remarkConfigPath,
},
},
rules: cspellEnabled
? {
'@cspell/spellchecker': [
'error',
merge({ autoFix: true }, cspellOptions),
],
}
: {},
},
{
files: ['**/*.mdx'],
rules: {
'no-unused-expressions': 'off',
},
},
{
files: ['**/*.{ts,tsx}'],
extends: [
tseslint.configs.recommendedTypeChecked,
react.configs['recommended-typescript'],
],
rules: {
'@typescript-eslint/no-misused-promises': 'off',
'@typescript-eslint/no-non-null-assertion': 'off',
'@typescript-eslint/restrict-template-expressions': [
'error',
{ allowNumber: true },
],
'prefer-const': ['error', { destructuring: 'all' }],
},
languageOptions: {
parser: tseslint.parser,
parserOptions: {
projectService: true,
},
},
},
]);
}
export default doom;