| 6dd74de | | | 1 | import cspell from '@cspell/eslint-plugin'; |
| 6dd74de | | | 2 | import eslint from '@eslint/js'; |
| 6dd74de | | | 3 | import cypress from 'eslint-plugin-cypress'; |
| 6dd74de | | | 4 | import jsdoc from 'eslint-plugin-jsdoc'; |
| 6dd74de | | | 5 | import json from 'eslint-plugin-json'; |
| 6dd74de | | | 6 | import lodash from 'eslint-plugin-lodash'; |
| 6dd74de | | | 7 | import markdown from 'eslint-plugin-markdown'; |
| 6dd74de | | | 8 | import noOnlyTests from 'eslint-plugin-no-only-tests'; |
| 6dd74de | | | 9 | import tsdoc from 'eslint-plugin-tsdoc'; |
| 6dd74de | | | 10 | import unicorn from 'eslint-plugin-unicorn'; |
| 6dd74de | | | 11 | import globals from 'globals'; |
| 6dd74de | | | 12 | import tseslint from 'typescript-eslint'; |
| 6dd74de | | | 13 | |
| 6dd74de | | | 14 | export default tseslint.config( |
| 6dd74de | | | 15 | eslint.configs.recommended, |
| 6dd74de | | | 16 | ...tseslint.configs.recommendedTypeChecked, |
| 6dd74de | | | 17 | ...tseslint.configs.stylisticTypeChecked, |
| 6dd74de | | | 18 | { |
| 6dd74de | | | 19 | ignores: [ |
| 6dd74de | | | 20 | '**/*.d.ts', |
| 6dd74de | | | 21 | '**/dist/', |
| 6dd74de | | | 22 | '**/node_modules/', |
| 6dd74de | | | 23 | '.git/', |
| 6dd74de | | | 24 | '**/generated/', |
| 6dd74de | | | 25 | '**/coverage/', |
| 6dd74de | | | 26 | 'packages/mermaid/src/config.type.ts', |
| 6dd74de | | | 27 | 'packages/mermaid/src/docs/.vitepress/components.d.ts', |
| 6dd74de | | | 28 | ], |
| 6dd74de | | | 29 | }, |
| 6dd74de | | | 30 | { |
| 6dd74de | | | 31 | languageOptions: { |
| 6dd74de | | | 32 | parserOptions: { |
| 6dd74de | | | 33 | project: [ |
| 6dd74de | | | 34 | './tsconfig.eslint.json', |
| 6dd74de | | | 35 | './packages/*/tsconfig.json', |
| 6dd74de | | | 36 | './packages/*/tsconfig.eslint.json', |
| 6dd74de | | | 37 | './packages/mermaid/src/docs/tsconfig.json', |
| 6dd74de | | | 38 | ], |
| 6dd74de | | | 39 | tsconfigRootDir: import.meta.dirname, |
| 6dd74de | | | 40 | }, |
| 6dd74de | | | 41 | globals: { |
| 6dd74de | | | 42 | ...globals.browser, |
| 6dd74de | | | 43 | ...globals.node, |
| 6dd74de | | | 44 | ...globals.es2020, |
| 6dd74de | | | 45 | ...globals.jest, |
| 6dd74de | | | 46 | cy: 'readonly', |
| 6dd74de | | | 47 | Cypress: 'readonly', |
| 6dd74de | | | 48 | }, |
| 6dd74de | | | 49 | }, |
| 6dd74de | | | 50 | }, |
| 6dd74de | | | 51 | { |
| 6dd74de | | | 52 | plugins: { |
| 6dd74de | | | 53 | json, |
| 6dd74de | | | 54 | '@cspell': cspell, |
| 6dd74de | | | 55 | 'no-only-tests': noOnlyTests, |
| 6dd74de | | | 56 | lodash, |
| 6dd74de | | | 57 | unicorn, |
| 6dd74de | | | 58 | cypress, |
| 6dd74de | | | 59 | markdown, |
| 6dd74de | | | 60 | tsdoc, |
| 6dd74de | | | 61 | jsdoc, |
| 6dd74de | | | 62 | }, |
| 6dd74de | | | 63 | rules: { |
| 6dd74de | | | 64 | curly: 'error', |
| 6dd74de | | | 65 | 'no-console': 'error', |
| 6dd74de | | | 66 | 'no-prototype-builtins': 'off', |
| 6dd74de | | | 67 | 'no-unused-vars': 'off', |
| 6dd74de | | | 68 | 'cypress/no-async-tests': 'off', |
| 6dd74de | | | 69 | '@typescript-eslint/consistent-type-imports': 'error', |
| 6dd74de | | | 70 | '@typescript-eslint/no-explicit-any': 'warn', |
| 6dd74de | | | 71 | '@typescript-eslint/no-floating-promises': 'error', |
| 6dd74de | | | 72 | '@typescript-eslint/no-misused-promises': 'error', |
| 6dd74de | | | 73 | '@typescript-eslint/no-unused-vars': [ |
| 6dd74de | | | 74 | 'error', |
| 6dd74de | | | 75 | { |
| 6dd74de | | | 76 | args: 'after-used', |
| 6dd74de | | | 77 | argsIgnorePattern: '^_', |
| 6dd74de | | | 78 | caughtErrors: 'all', |
| 6dd74de | | | 79 | caughtErrorsIgnorePattern: '^_', |
| 6dd74de | | | 80 | destructuredArrayIgnorePattern: '^_', |
| 6dd74de | | | 81 | varsIgnorePattern: '^_', |
| 6dd74de | | | 82 | ignoreRestSiblings: true, |
| 6dd74de | | | 83 | }, |
| 6dd74de | | | 84 | ], |
| 6dd74de | | | 85 | '@typescript-eslint/consistent-type-definitions': 'error', |
| 6dd74de | | | 86 | '@typescript-eslint/ban-ts-comment': [ |
| 6dd74de | | | 87 | 'error', |
| 6dd74de | | | 88 | { |
| 6dd74de | | | 89 | 'ts-expect-error': 'allow-with-description', |
| 6dd74de | | | 90 | 'ts-ignore': 'allow-with-description', |
| 6dd74de | | | 91 | 'ts-nocheck': 'allow-with-description', |
| 6dd74de | | | 92 | 'ts-check': 'allow-with-description', |
| 6dd74de | | | 93 | minimumDescriptionLength: 10, |
| 6dd74de | | | 94 | }, |
| 6dd74de | | | 95 | ], |
| 6dd74de | | | 96 | '@typescript-eslint/naming-convention': [ |
| 6dd74de | | | 97 | 'error', |
| 6dd74de | | | 98 | { |
| 6dd74de | | | 99 | selector: 'typeLike', |
| 6dd74de | | | 100 | format: ['PascalCase'], |
| 6dd74de | | | 101 | custom: { |
| 6dd74de | | | 102 | regex: '^I[A-Z]', |
| 6dd74de | | | 103 | match: false, |
| 6dd74de | | | 104 | }, |
| 6dd74de | | | 105 | }, |
| 6dd74de | | | 106 | ], |
| 6dd74de | | | 107 | // START: These rules should be turned on once the codebase is cleaned up |
| 6dd74de | | | 108 | '@typescript-eslint/no-unsafe-argument': 'off', |
| 6dd74de | | | 109 | '@typescript-eslint/no-unsafe-assignment': 'off', |
| 6dd74de | | | 110 | '@typescript-eslint/no-unsafe-call': 'off', |
| 6dd74de | | | 111 | '@typescript-eslint/no-unsafe-member-access': 'off', |
| 6dd74de | | | 112 | '@typescript-eslint/no-unsafe-return': 'off', |
| 6dd74de | | | 113 | '@typescript-eslint/only-throw-error': 'warn', |
| 6dd74de | | | 114 | '@typescript-eslint/prefer-nullish-coalescing': 'warn', |
| 6dd74de | | | 115 | '@typescript-eslint/prefer-promise-reject-errors': 'warn', |
| 6dd74de | | | 116 | // END |
| 6dd74de | | | 117 | 'json/*': ['error', 'allowComments'], |
| 6dd74de | | | 118 | '@cspell/spellchecker': [ |
| 6dd74de | | | 119 | 'error', |
| 6dd74de | | | 120 | { |
| 6dd74de | | | 121 | checkIdentifiers: true, |
| 6dd74de | | | 122 | checkStrings: true, |
| 6dd74de | | | 123 | checkStringTemplates: true, |
| 6dd74de | | | 124 | }, |
| 6dd74de | | | 125 | ], |
| 6dd74de | | | 126 | 'no-empty': [ |
| 6dd74de | | | 127 | 'error', |
| 6dd74de | | | 128 | { |
| 6dd74de | | | 129 | allowEmptyCatch: true, |
| 6dd74de | | | 130 | }, |
| 6dd74de | | | 131 | ], |
| 6dd74de | | | 132 | 'no-only-tests/no-only-tests': 'error', |
| 6dd74de | | | 133 | 'lodash/import-scope': ['error', 'method'], |
| 6dd74de | | | 134 | 'unicorn/better-regex': 'error', |
| 6dd74de | | | 135 | 'unicorn/no-abusive-eslint-disable': 'error', |
| 6dd74de | | | 136 | 'unicorn/no-array-push-push': 'error', |
| 6dd74de | | | 137 | 'unicorn/no-for-loop': 'error', |
| 6dd74de | | | 138 | 'unicorn/no-instanceof-array': 'error', |
| 6dd74de | | | 139 | 'unicorn/no-typeof-undefined': 'error', |
| 6dd74de | | | 140 | 'unicorn/no-unnecessary-await': 'error', |
| 6dd74de | | | 141 | 'unicorn/no-useless-promise-resolve-reject': 'error', |
| 6dd74de | | | 142 | 'unicorn/prefer-array-find': 'error', |
| 6dd74de | | | 143 | 'unicorn/prefer-array-flat-map': 'error', |
| 6dd74de | | | 144 | 'unicorn/prefer-array-index-of': 'error', |
| 6dd74de | | | 145 | 'unicorn/prefer-array-some': 'error', |
| 6dd74de | | | 146 | 'unicorn/prefer-default-parameters': 'error', |
| 6dd74de | | | 147 | 'unicorn/prefer-includes': 'error', |
| 6dd74de | | | 148 | 'unicorn/prefer-negative-index': 'error', |
| 6dd74de | | | 149 | 'unicorn/prefer-object-from-entries': 'error', |
| 6dd74de | | | 150 | 'unicorn/prefer-string-starts-ends-with': 'error', |
| 6dd74de | | | 151 | 'unicorn/prefer-string-trim-start-end': 'error', |
| 6dd74de | | | 152 | 'unicorn/string-content': 'error', |
| 6dd74de | | | 153 | 'unicorn/prefer-spread': 'error', |
| 6dd74de | | | 154 | 'unicorn/no-lonely-if': 'error', |
| 6dd74de | | | 155 | }, |
| 6dd74de | | | 156 | }, |
| 6dd74de | | | 157 | { |
| 6dd74de | | | 158 | files: ['cypress/**', 'demos/**'], |
| 6dd74de | | | 159 | rules: { |
| 6dd74de | | | 160 | 'no-console': 'off', |
| 6dd74de | | | 161 | }, |
| 6dd74de | | | 162 | }, |
| 6dd74de | | | 163 | { |
| 6dd74de | | | 164 | files: ['**/*.{js,jsx,mjs,cjs}'], |
| 6dd74de | | | 165 | rules: { |
| 6dd74de | | | 166 | 'jsdoc/check-indentation': 'off', |
| 6dd74de | | | 167 | 'jsdoc/check-alignment': 'off', |
| 6dd74de | | | 168 | 'jsdoc/check-line-alignment': 'off', |
| 6dd74de | | | 169 | 'jsdoc/multiline-blocks': 'off', |
| 6dd74de | | | 170 | 'jsdoc/newline-after-description': 'off', |
| 6dd74de | | | 171 | 'jsdoc/tag-lines': 'off', |
| 6dd74de | | | 172 | 'jsdoc/require-param-description': 'off', |
| 6dd74de | | | 173 | 'jsdoc/require-param-type': 'off', |
| 6dd74de | | | 174 | 'jsdoc/require-returns': 'off', |
| 6dd74de | | | 175 | 'jsdoc/require-returns-description': 'off', |
| 6dd74de | | | 176 | }, |
| 6dd74de | | | 177 | }, |
| 6dd74de | | | 178 | { |
| 6dd74de | | | 179 | files: ['**/*.{ts,tsx}'], |
| 6dd74de | | | 180 | rules: { |
| 6dd74de | | | 181 | 'no-restricted-syntax': [ |
| 6dd74de | | | 182 | 'error', |
| 6dd74de | | | 183 | { |
| 6dd74de | | | 184 | selector: 'TSEnumDeclaration', |
| 6dd74de | | | 185 | message: |
| 6dd74de | | | 186 | 'Prefer using TypeScript union types over TypeScript enum, since TypeScript enums have a bunch of issues, see https://dev.to/dvddpl/whats-the-problem-with-typescript-enums-2okj', |
| 6dd74de | | | 187 | }, |
| 6dd74de | | | 188 | ], |
| 6dd74de | | | 189 | 'tsdoc/syntax': 'error', |
| 6dd74de | | | 190 | }, |
| 6dd74de | | | 191 | }, |
| 6dd74de | | | 192 | { |
| 6dd74de | | | 193 | files: ['**/*.spec.{ts,js}', 'cypress/**', 'demos/**', '**/docs/**'], |
| 6dd74de | | | 194 | rules: { |
| 6dd74de | | | 195 | 'jsdoc/require-jsdoc': 'off', |
| 6dd74de | | | 196 | '@typescript-eslint/no-unused-vars': 'off', |
| 6dd74de | | | 197 | }, |
| 6dd74de | | | 198 | }, |
| 6dd74de | | | 199 | { |
| 6dd74de | | | 200 | files: ['**/*.spec.{ts,js}', 'tests/**', 'cypress/**/*.js'], |
| 6dd74de | | | 201 | rules: { |
| 6dd74de | | | 202 | '@cspell/spellchecker': [ |
| 6dd74de | | | 203 | 'error', |
| 6dd74de | | | 204 | { |
| 6dd74de | | | 205 | checkIdentifiers: false, |
| 6dd74de | | | 206 | checkStrings: false, |
| 6dd74de | | | 207 | checkStringTemplates: false, |
| 6dd74de | | | 208 | }, |
| 6dd74de | | | 209 | ], |
| 6dd74de | | | 210 | }, |
| 6dd74de | | | 211 | }, |
| 6dd74de | | | 212 | { |
| 6dd74de | | | 213 | files: ['*.html', '*.md', '**/*.md/*'], |
| 6dd74de | | | 214 | rules: { |
| 6dd74de | | | 215 | 'no-var': 'error', |
| 6dd74de | | | 216 | 'no-undef': 'off', |
| 6dd74de | | | 217 | '@typescript-eslint/no-unused-vars': 'off', |
| 6dd74de | | | 218 | '@typescript-eslint/no-floating-promises': 'off', |
| 6dd74de | | | 219 | '@typescript-eslint/no-misused-promises': 'off', |
| 6dd74de | | | 220 | }, |
| 6dd74de | | | 221 | processor: 'markdown/markdown', |
| 6dd74de | | | 222 | } |
| 6dd74de | | | 223 | ); |