/** * Copyright 2025 LY Corporation * * LY Corporation licenses this file to you under the Apache License, * version 2.0 (the "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at: * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations * under the License. */ /// 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 tseslint from 'typescript-eslint'; import headerPlugin from '@ufb/eslint-plugin-header'; /** * All packages that leverage t3-env should use this rule */ export const restrictEnvAccess = tseslint.config( { 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 default tseslint.config( // 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, header: headerPlugin, }, 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'], 'header/header': [ 'error', 'block', [ '*', ' * Copyright 2025 LY Corporation', ' *', ' * LY Corporation licenses this file to you under the Apache License,', ' * version 2.0 (the "License"); you may not use this file except in compliance', ' * with the License. You may obtain a copy of the License at:', ' *', ' * https://www.apache.org/licenses/LICENSE-2.0', ' *', ' * Unless required by applicable law or agreed to in writing, software', ' * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT', ' * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the', ' * License for the specific language governing permissions and limitations', ' * under the License.', ' ', ], 1, ], '@typescript-eslint/no-empty-interface': 'off', '@typescript-eslint/no-empty-object-type': 'off', '@typescript-eslint/no-base-to-string': 'off', '@typescript-eslint/consistent-type-definitions': 'off', }, }, { linterOptions: { reportUnusedDisableDirectives: true }, languageOptions: { parserOptions: { projectService: true } }, }, );