import * as path from 'node:path'; import { includeIgnoreFile } from '@eslint/compat'; import eslint from '@eslint/js'; import importPlugin from 'eslint-plugin-import'; import turboPlugin from 'eslint-plugin-turbo'; import { defineConfig } from 'eslint/config'; import tseslint from 'typescript-eslint'; /** * All packages that leverage t3-env should use this rule */ export const restrictEnvAccess = defineConfig( { ignores: ['**/env.ts'] }, { files: ['**/*.js', '**/*.ts', '**/*.tsx'], rules: { 'no-restricted-properties': [ 'error', { object: 'process', property: 'env', message: "Use `import { env } from '@/env'` instead to ensure validated types.", }, ], 'no-restricted-imports': [ 'error', { name: 'process', importNames: ['env'], message: "Use `import { env } from '@/env'` instead to ensure validated types.", }, ], }, }, ); export const baseConfig = defineConfig( // Ignore files not tracked by VCS and any config files includeIgnoreFile(path.join(import.meta.dirname, '../../.gitignore')), { ignores: ['**/*.config.*'] }, { files: ['**/*.js', '**/*.ts', '**/*.tsx'], plugins: { import: importPlugin, turbo: turboPlugin, }, extends: [ eslint.configs.recommended, ...tseslint.configs.recommended, ...tseslint.configs.recommendedTypeChecked, ...tseslint.configs.stylisticTypeChecked, ], rules: { ...turboPlugin.configs.recommended.rules, '@typescript-eslint/no-unused-vars': [ 'error', { argsIgnorePattern: '^_', varsIgnorePattern: '^_' }, ], '@typescript-eslint/consistent-type-imports': [ 'warn', { prefer: 'type-imports', fixStyle: 'separate-type-imports' }, ], '@typescript-eslint/no-misused-promises': [ 2, { checksVoidReturn: { attributes: false } }, ], '@typescript-eslint/no-unnecessary-condition': [ 'error', { allowConstantLoopConditions: true, }, ], '@typescript-eslint/no-non-null-assertion': 'error', 'import/consistent-type-specifier-style': ['error', 'prefer-top-level'], }, }, { linterOptions: { reportUnusedDisableDirectives: true }, languageOptions: { parserOptions: { projectService: true, tsconfigRootDir: import.meta.dirname, }, }, }, );