comic-vine-sdk
Version:
A JS/TS client for the Comic Vine API
169 lines (157 loc) • 3.91 kB
JavaScript
// @ts-check
import eslint from '@eslint/js';
import importPlugin from 'eslint-plugin-import';
import prettierPlugin from 'eslint-plugin-prettier';
import prettierConfig from 'eslint-config-prettier';
import tseslint from 'typescript-eslint';
import globals from 'globals';
export default tseslint.config(
// Base ESLint recommended rules
eslint.configs.recommended,
// TypeScript ESLint recommended rules
...tseslint.configs.recommended,
// Prettier config to disable formatting rules that conflict with Prettier
prettierConfig,
// Base configuration for all files
{
plugins: {
import: importPlugin,
prettier: prettierPlugin,
},
languageOptions: {
ecmaVersion: 2018,
sourceType: 'module',
globals: {
...globals.node,
},
},
settings: {
'import/parsers': {
'@typescript-eslint/parser': ['.ts', '.tsx'],
},
'import/resolver': {
node: {},
typescript: {
project: './tsconfig.dev.json',
alwaysTryTypes: true,
},
},
},
rules: {
'prettier/prettier': ['error'],
'import/no-extraneous-dependencies': [
'error',
{
devDependencies: [
'**/test/**',
'**/build-tools/**',
'.projenrc.ts',
'projenrc/**/*.ts',
],
optionalDependencies: false,
peerDependencies: true,
},
],
'import/no-unresolved': ['error'],
'import/order': [
'warn',
{
groups: ['builtin', 'external'],
alphabetize: {
order: 'asc',
caseInsensitive: true,
},
},
],
'no-duplicate-imports': ['error'],
'no-shadow': ['off'],
'@typescript-eslint/no-shadow': ['error'],
'@typescript-eslint/no-unused-vars': [
'error',
{
argsIgnorePattern: '^_',
varsIgnorePattern: '^_',
caughtErrorsIgnorePattern: '^_',
},
],
'key-spacing': ['error'],
'no-multiple-empty-lines': ['error'],
'@typescript-eslint/no-floating-promises': ['error'],
'no-return-await': ['off'],
'@typescript-eslint/return-await': ['error'],
'no-trailing-spaces': ['error'],
'dot-notation': ['error'],
'no-bitwise': ['error'],
'@typescript-eslint/member-ordering': [
'error',
{
default: [
'public-static-field',
'public-static-method',
'protected-static-field',
'protected-static-method',
'private-static-field',
'private-static-method',
'field',
'constructor',
'method',
],
},
],
},
},
// Configuration for TypeScript files
{
files: ['**/*.ts', '**/*.tsx'],
languageOptions: {
parser: tseslint.parser,
parserOptions: {
ecmaVersion: 2018,
sourceType: 'module',
project: './tsconfig.dev.json',
},
},
rules: {
'@typescript-eslint/no-require-imports': ['error'],
},
},
// Configuration for test files
{
files: ['**/*.test.ts'],
languageOptions: {
globals: {
...globals.vitest,
},
},
rules: {
'dot-notation': 'off',
'import/no-extraneous-dependencies': [
'error',
{
devDependencies: true,
},
],
},
},
// Configuration for .projenrc.ts
{
files: ['.projenrc.ts'],
rules: {
'@typescript-eslint/no-require-imports': 'off',
'import/no-extraneous-dependencies': 'off',
},
},
// Global ignores
{
ignores: [
'*.js',
'*.d.ts',
'node_modules/',
'*.generated.ts',
'coverage',
'scripts/create-package-json.ts',
'!.projenrc.ts',
'!projenrc/**/*.ts',
],
},
);