@bfra.me/eslint-config
Version:
Shared ESLint configuration for bfra.me
73 lines (71 loc) • 2.38 kB
text/typescript
import type {Config} from '../config'
import {anyParser} from '../parsers/any-parser'
import {requireOf} from '../require-of'
import {interopDefault} from '../utils'
import {fallback} from './fallback'
export async function jsonSchema(name: string, files: string[]): Promise<Config[]> {
return requireOf(
['eslint-plugin-json-schema-validator'],
async () => {
const pluginJsonSchemaValidator = await interopDefault(
import('eslint-plugin-json-schema-validator'),
)
return [
...pluginJsonSchemaValidator.configs['flat/recommended']
.map((config: Config) => {
if (config.files == null) {
return {...config, files}
}
if (config.files.flat().some(file => files.some(suffix => file.endsWith(suffix)))) {
return config
}
return {}
})
.filter(o => Object.keys(o).length > 0)
.map((config: Config, index) => ({
...config,
name: config.plugins
? `@bfra.me/${name}/json-schema/plugins`
: `@bfra.me/${name}/json-schema/${(config.name ?? '') || `unnamed${index}`}`,
})),
{
name: `@bfra.me/${name}/json-schema`,
files,
rules: {
'json-schema-validator/no-invalid': [
'error',
{
schemas: [
{
fileMatch: ['.eslintrc.js'],
schema: 'https://json.schemastore.org/eslintrc',
},
{
fileMatch: ['.prettierrc.toml'],
schema: 'https://json.schemastore.org/prettierrc',
},
{
fileMatch: [
'stylelint.config.js',
'stylelint.config.cjs',
'.stylelintrc.js',
'.stylelintrc.yaml',
'.stylelintrc.yml',
],
schema: 'https://json.schemastore.org/stylelintrc',
},
],
useSchemastoreCatalog: true,
},
],
},
},
]
},
async missingList =>
fallback(missingList, {
files,
languageOptions: {parser: anyParser},
}),
)
}