mirror of
				https://github.com/mermaid-js/mermaid.git
				synced 2025-10-25 00:44:10 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			223 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			223 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import cspell from '@cspell/eslint-plugin';
 | |
| import eslint from '@eslint/js';
 | |
| import cypress from 'eslint-plugin-cypress';
 | |
| import jsdoc from 'eslint-plugin-jsdoc';
 | |
| import json from 'eslint-plugin-json';
 | |
| import lodash from 'eslint-plugin-lodash';
 | |
| import markdown from 'eslint-plugin-markdown';
 | |
| import noOnlyTests from 'eslint-plugin-no-only-tests';
 | |
| import tsdoc from 'eslint-plugin-tsdoc';
 | |
| import unicorn from 'eslint-plugin-unicorn';
 | |
| import globals from 'globals';
 | |
| import tseslint from 'typescript-eslint';
 | |
| 
 | |
| export default tseslint.config(
 | |
|   eslint.configs.recommended,
 | |
|   ...tseslint.configs.recommendedTypeChecked,
 | |
|   ...tseslint.configs.stylisticTypeChecked,
 | |
|   {
 | |
|     ignores: [
 | |
|       '**/dist/',
 | |
|       '**/node_modules/',
 | |
|       '.git/',
 | |
|       '**/generated/',
 | |
|       '**/coverage/',
 | |
|       'packages/mermaid/src/config.type.ts',
 | |
|       'packages/mermaid/src/docs/.vitepress/components.d.ts',
 | |
|     ],
 | |
|   },
 | |
|   {
 | |
|     languageOptions: {
 | |
|       parserOptions: {
 | |
|         project: [
 | |
|           './tsconfig.eslint.json',
 | |
|           './packages/*/tsconfig.json',
 | |
|           './packages/*/tsconfig.eslint.json',
 | |
|           './packages/mermaid/src/docs/tsconfig.json',
 | |
|         ],
 | |
|         tsconfigRootDir: import.meta.dirname,
 | |
|       },
 | |
|       globals: {
 | |
|         ...globals.browser,
 | |
|         ...globals.node,
 | |
|         ...globals.es2020,
 | |
|         ...globals.jest,
 | |
|         cy: 'readonly',
 | |
|         Cypress: 'readonly',
 | |
|       },
 | |
|     },
 | |
|   },
 | |
|   {
 | |
|     plugins: {
 | |
|       json,
 | |
|       '@cspell': cspell,
 | |
|       'no-only-tests': noOnlyTests,
 | |
|       lodash,
 | |
|       unicorn,
 | |
|       cypress,
 | |
|       markdown,
 | |
|       tsdoc,
 | |
|       jsdoc,
 | |
|     },
 | |
|     rules: {
 | |
|       curly: 'error',
 | |
|       'no-console': 'error',
 | |
|       'no-prototype-builtins': 'off',
 | |
|       'no-unused-vars': 'off',
 | |
|       'cypress/no-async-tests': 'off',
 | |
|       '@typescript-eslint/consistent-type-imports': 'error',
 | |
|       '@typescript-eslint/no-explicit-any': 'warn',
 | |
|       '@typescript-eslint/no-floating-promises': 'error',
 | |
|       '@typescript-eslint/no-misused-promises': 'error',
 | |
|       '@typescript-eslint/no-unused-vars': [
 | |
|         'error',
 | |
|         {
 | |
|           args: 'after-used',
 | |
|           argsIgnorePattern: '^_',
 | |
|           caughtErrors: 'all',
 | |
|           caughtErrorsIgnorePattern: '^_',
 | |
|           destructuredArrayIgnorePattern: '^_',
 | |
|           varsIgnorePattern: '^_',
 | |
|           ignoreRestSiblings: true,
 | |
|         },
 | |
|       ],
 | |
|       '@typescript-eslint/consistent-type-definitions': 'error',
 | |
|       '@typescript-eslint/ban-ts-comment': [
 | |
|         'error',
 | |
|         {
 | |
|           'ts-expect-error': 'allow-with-description',
 | |
|           'ts-ignore': 'allow-with-description',
 | |
|           'ts-nocheck': 'allow-with-description',
 | |
|           'ts-check': 'allow-with-description',
 | |
|           minimumDescriptionLength: 10,
 | |
|         },
 | |
|       ],
 | |
|       '@typescript-eslint/naming-convention': [
 | |
|         'error',
 | |
|         {
 | |
|           selector: 'typeLike',
 | |
|           format: ['PascalCase'],
 | |
|           custom: {
 | |
|             regex: '^I[A-Z]',
 | |
|             match: false,
 | |
|           },
 | |
|         },
 | |
|       ],
 | |
|       // START: These rules should be turned on once the codebase is cleaned up
 | |
|       '@typescript-eslint/no-unsafe-argument': 'off',
 | |
|       '@typescript-eslint/no-unsafe-assignment': 'off',
 | |
|       '@typescript-eslint/no-unsafe-call': 'off',
 | |
|       '@typescript-eslint/no-unsafe-member-access': 'off',
 | |
|       '@typescript-eslint/no-unsafe-return': 'off',
 | |
|       '@typescript-eslint/only-throw-error': 'warn',
 | |
|       '@typescript-eslint/prefer-nullish-coalescing': 'warn',
 | |
|       '@typescript-eslint/prefer-promise-reject-errors': 'warn',
 | |
|       // END
 | |
|       'json/*': ['error', 'allowComments'],
 | |
|       '@cspell/spellchecker': [
 | |
|         'error',
 | |
|         {
 | |
|           checkIdentifiers: true,
 | |
|           checkStrings: true,
 | |
|           checkStringTemplates: true,
 | |
|         },
 | |
|       ],
 | |
|       'no-empty': [
 | |
|         'error',
 | |
|         {
 | |
|           allowEmptyCatch: true,
 | |
|         },
 | |
|       ],
 | |
|       'no-only-tests/no-only-tests': 'error',
 | |
|       'lodash/import-scope': ['error', 'method'],
 | |
|       'unicorn/better-regex': 'error',
 | |
|       'unicorn/no-abusive-eslint-disable': 'error',
 | |
|       'unicorn/no-array-push-push': 'error',
 | |
|       'unicorn/no-for-loop': 'error',
 | |
|       'unicorn/no-instanceof-array': 'error',
 | |
|       'unicorn/no-typeof-undefined': 'error',
 | |
|       'unicorn/no-unnecessary-await': 'error',
 | |
|       'unicorn/no-useless-promise-resolve-reject': 'error',
 | |
|       'unicorn/prefer-array-find': 'error',
 | |
|       'unicorn/prefer-array-flat-map': 'error',
 | |
|       'unicorn/prefer-array-index-of': 'error',
 | |
|       'unicorn/prefer-array-some': 'error',
 | |
|       'unicorn/prefer-default-parameters': 'error',
 | |
|       'unicorn/prefer-includes': 'error',
 | |
|       'unicorn/prefer-negative-index': 'error',
 | |
|       'unicorn/prefer-object-from-entries': 'error',
 | |
|       'unicorn/prefer-string-starts-ends-with': 'error',
 | |
|       'unicorn/prefer-string-trim-start-end': 'error',
 | |
|       'unicorn/string-content': 'error',
 | |
|       'unicorn/prefer-spread': 'error',
 | |
|       'unicorn/no-lonely-if': 'error',
 | |
|     },
 | |
|   },
 | |
|   {
 | |
|     files: ['cypress/**', 'demos/**'],
 | |
|     rules: {
 | |
|       'no-console': 'off',
 | |
|     },
 | |
|   },
 | |
|   {
 | |
|     files: ['**/*.{js,jsx,mjs,cjs}'],
 | |
|     rules: {
 | |
|       'jsdoc/check-indentation': 'off',
 | |
|       'jsdoc/check-alignment': 'off',
 | |
|       'jsdoc/check-line-alignment': 'off',
 | |
|       'jsdoc/multiline-blocks': 'off',
 | |
|       'jsdoc/newline-after-description': 'off',
 | |
|       'jsdoc/tag-lines': 'off',
 | |
|       'jsdoc/require-param-description': 'off',
 | |
|       'jsdoc/require-param-type': 'off',
 | |
|       'jsdoc/require-returns': 'off',
 | |
|       'jsdoc/require-returns-description': 'off',
 | |
|     },
 | |
|   },
 | |
|   {
 | |
|     files: ['**/*.{ts,tsx}'],
 | |
|     rules: {
 | |
|       'no-restricted-syntax': [
 | |
|         'error',
 | |
|         {
 | |
|           selector: 'TSEnumDeclaration',
 | |
|           message:
 | |
|             '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',
 | |
|         },
 | |
|       ],
 | |
|       'tsdoc/syntax': 'error',
 | |
|     },
 | |
|   },
 | |
|   {
 | |
|     files: ['**/*.spec.{ts,js}', 'cypress/**', 'demos/**', '**/docs/**'],
 | |
|     rules: {
 | |
|       'jsdoc/require-jsdoc': 'off',
 | |
|       '@typescript-eslint/no-unused-vars': 'off',
 | |
|     },
 | |
|   },
 | |
|   {
 | |
|     files: ['**/*.spec.{ts,js}', 'tests/**', 'cypress/**/*.js'],
 | |
|     rules: {
 | |
|       '@cspell/spellchecker': [
 | |
|         'error',
 | |
|         {
 | |
|           checkIdentifiers: false,
 | |
|           checkStrings: false,
 | |
|           checkStringTemplates: false,
 | |
|         },
 | |
|       ],
 | |
|     },
 | |
|   },
 | |
|   {
 | |
|     files: ['*.html', '*.md', '**/*.md/*'],
 | |
|     rules: {
 | |
|       'no-var': 'error',
 | |
|       'no-undef': 'off',
 | |
|       '@typescript-eslint/no-unused-vars': 'off',
 | |
|       '@typescript-eslint/no-floating-promises': 'off',
 | |
|       '@typescript-eslint/no-misused-promises': 'off',
 | |
|     },
 | |
|     processor: 'markdown/markdown',
 | |
|   }
 | |
| );
 | 
