dmvic
Version:
A DMVIC NPM package to manage DMVIC certificate requests
158 lines (140 loc) • 5.04 kB
JavaScript
import js from '@eslint/js';
import tseslint from '@typescript-eslint/eslint-plugin';
import tsparser from '@typescript-eslint/parser';
import prettier from 'eslint-config-prettier';
import pluginImport from 'eslint-plugin-import';
import pluginJest from 'eslint-plugin-jest';
import pluginN from 'eslint-plugin-n';
import pluginPromise from 'eslint-plugin-promise';
import pluginSecurity from 'eslint-plugin-security';
import simpleImportSort from 'eslint-plugin-simple-import-sort';
import sonarjs from 'eslint-plugin-sonarjs';
import pluginUnicorn from 'eslint-plugin-unicorn';
import globals from 'globals';
export default [
{
ignores: ['CHANGELOG.md'],
},
js.configs.recommended,
{
files: ['**/*.js', '**/*.mjs'],
ignores: ['eslint.config.js', '**/*.test.js', '**/*.test.mjs'],
languageOptions: {
ecmaVersion: 2022,
sourceType: 'module',
globals: {
...globals.node,
...globals.es2022,
},
},
plugins: {
import: pluginImport,
unicorn: pluginUnicorn,
security: pluginSecurity,
promise: pluginPromise,
n: pluginN,
sort: simpleImportSort,
sonar: sonarjs,
},
rules: {
// Core rules
'no-console': 'error',
'no-prototype-builtins': 'error',
'import/no-duplicates': 'error',
'no-unused-vars': ['error', { argsIgnorePattern: '^_', varsIgnorePattern: '^_' }],
// Unicorn rules
'unicorn/prefer-module': 'error',
'unicorn/no-array-for-each': 'error',
'unicorn/prefer-node-protocol': 'error',
'unicorn/prefer-top-level-await': 'error',
// Security rules
'security/detect-buffer-noassert': 'warn',
'security/detect-child-process': 'error',
'security/detect-disable-mustache-escape': 'error',
'security/detect-eval-with-expression': 'error',
'security/detect-new-buffer': 'warn',
'security/detect-non-literal-fs-filename': 'warn',
'security/detect-unsafe-regex': 'warn',
// Import rules
'import/first': 'error',
'import/no-extraneous-dependencies': ['error', { devDependencies: true }],
// Promise rules
'promise/catch-or-return': 'warn',
// sort
'sort/imports': 'error',
'sort/exports': 'error',
// sonar
'sonar/cognitive-complexity': ['error', 10],
'sonar/no-hardcoded-secrets': 'error',
'sonar/confidential-information-logging': 'error',
'sonar/no-identical-functions': 'error',
'sonar/no-identical-expressions': 'error',
'sonar/function-return-type': 'error',
'sonar/no-redundant-boolean': 'error',
'sonar/no-identical-conditions': 'error',
'sonar/no-collection-size-mischeck': 'error',
// Code length limits
'max-lines': ['error', { max: 100, skipBlankLines: true, skipComments: true }],
'max-lines-per-function': [
'error',
{ max: 40, skipBlankLines: true, skipComments: true },
],
},
},
// TypeScript declaration files
{
files: ['**/*.d.ts'],
languageOptions: {
parser: tsparser,
ecmaVersion: 2022,
sourceType: 'module',
},
plugins: {
types: tseslint,
import: pluginImport,
},
rules: {
'import/no-duplicates': 'error',
'prefer-const': 'error',
'types/prefer-as-const': 'error',
'no-unused-vars': 'off',
},
},
{
files: ['**/*.test.js', '**/*.test.mjs'],
plugins: {
import: pluginImport,
jest: pluginJest,
},
languageOptions: {
ecmaVersion: 2022,
sourceType: 'module',
globals: {
...globals.jest,
...globals.node,
...globals.es2022,
},
},
rules: {
'import/first': 'off',
'import/no-extraneous-dependencies': ['error', { devDependencies: true }],
'unicorn/no-array-for-each': 'off',
'no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
'jest/no-disabled-tests': 'error',
'jest/no-focused-tests': 'error',
'jest/no-identical-title': 'error',
'jest/prefer-to-have-length': 'error',
'jest/valid-expect': 'error',
'max-lines': 'off',
'max-lines-per-function': 'off',
'import/no-duplicates': 'error',
},
},
{
files: ['**/payload-schema.mjs', 'eslint.config.js'],
rules: {
'max-lines': 'off',
},
},
prettier,
];