{
	"root": true,
	"env": {
		"es2021": true,
		"node": true,
		"commonjs": true
	},
	"extends": [
		"eslint:recommended",
		"plugin:@typescript-eslint/eslint-recommended",
		"plugin:@typescript-eslint/recommended"
	],
	"parser": "@typescript-eslint/parser",
	"parserOptions": {
		"ecmaVersion": 2021,
		"sourceType": "module"
	},
	"plugins": [
		"@typescript-eslint",
		"unicorn"
	],
	"rules": {
		// Base Eslint Rules
		"indent": [
			"error",
			"tab",
			{
				"SwitchCase": 1,
				"CallExpression": {
					"arguments": 1
				}
			}
		],
		"linebreak-style": [
			"error",
			"unix"
		],
		"quotes": [
			"error",
			"single"
		],
		"semi": [
			"error",
			"always"
		],
		"eol-last": [
			"error",
			"always"
		],
		"object-curly-spacing": [
			"error",
			"always"
		],
		"default-case": "error",
		"comma-dangle": [
			"error",
			"always-multiline"
		],
		"no-case-declarations": "off",
		"camelcase": "off",
		"keyword-spacing": "error",
		"spaced-comment": [
			"error",
			"always"
		],
		"no-var": "error",
		"eqeqeq": "error",
		"no-eq-null": "error",
		"arrow-parens": [
			"error",
			"always"
		],
		// TypeScript Rules
		"@typescript-eslint/naming-convention": [
			"error",
			{
				"selector": "class",
				"format": [
					"PascalCase"
				]
			},
			{
				"selector": "classProperty",
				"modifiers": [
					"private"
				],
				"format": [
					"camelCase"
				],
				"leadingUnderscore": "require"
			},
			{
				"selector": "interface",
				"format": null,
				"custom": {
					"regex": "^I",
					"match": true
				}
			},
			{
				"selector": "enum",
				"format": null,
				"custom": {
					"regex": "^E",
					"match": true
				}
			}
		],
		"@typescript-eslint/no-non-null-assertion": "off",
		"@typescript-eslint/explicit-member-accessibility": [
			"error",
			{
				"accessibility": "explicit"
			}
		],
		"@typescript-eslint/explicit-function-return-type": "error",
		// Unicorn Rules
		"unicorn/filename-case": [
			"error",
			{
				"case": "camelCase"
			}
		]
	},
	"reportUnusedDisableDirectives": true
}