module.exports = {
	root: true,
	parser: "@typescript-eslint/parser",
	parserOptions: {
		tsconfigRootDir: __dirname,
		project: ["./tsconfig.json"],
	},
	plugins: ["@typescript-eslint"],
	extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended"],
	rules: {
		indent: [
			"error",
			"tab",
			{
				SwitchCase: 1,
				MemberExpression: "off",
				flatTernaryExpressions: true,
				ArrayExpression: "first",
				ObjectExpression: "first",
			},
		],
		"eol-last": ["error", "always"],
		semi: ["error", "always"],
		quotes: ["error", "single"],
		"comma-dangle": ["error", "always-multiline"],
		"keyword-spacing": [
			"error",
			{
				before: true,
				after: true,
			},
		],
		"key-spacing": [
			"error",
			{
				beforeColon: false,
				afterColon: true,
			},
		],
		"space-infix-ops": ["error"],
		"space-before-blocks": ["error", "always"],
		"object-curly-spacing": ["error", "always"],
		"nonblock-statement-body-position": ["error", "beside"],
		eqeqeq: ["error", "always", { null: "ignore" }],
		"no-multiple-empty-lines": ["error", { max: 1 }],
		"no-multi-spaces": ["error"],
		"no-var": ["error"],
		"prefer-arrow-callback": ["error"],
		"no-throw-literal": ["error"],
		"no-param-reassign": ["warn"],
		"no-constant-condition": ["warn"],
		"no-empty-pattern": ["warn"],
		"@typescript-eslint/no-unnecessary-condition": ["error"],
		"@typescript-eslint/no-inferrable-types": ["warn"],
		"@typescript-eslint/no-non-null-assertion": ["warn"],
		"@typescript-eslint/explicit-function-return-type": ["warn"],
		"@typescript-eslint/no-misused-promises": [
			"error",
			{
				checksVoidReturn: false,
			},
		],
		"@typescript-eslint/consistent-type-imports": "error",
	},
};