feat: enforce @/ alias for imports and fix all relative parent imports (#16787)

## Summary
This PR enforces the use of `@/` alias for imports instead of relative
parent imports (`../`).

## Changes

### ESLint Configuration
- Added `no-restricted-imports` pattern in `eslint.config.react.mjs` to
block `../*` imports with the message "Relative parent imports are not
allowed. Use @/ alias instead."
- Removed the non-working `import/no-relative-parent-imports` rule
(doesn't work properly in ESLint flat config)

### VS Code Settings
- Added `javascript.preferences.importModuleSpecifier: non-relative` to
`.vscode/settings.json` (TypeScript setting was already there)

### Code Fixes
- Fixed **941 relative parent imports** across **706 files** in
`packages/twenty-front`
- All `../` imports converted to use `@/` alias

## Why
- Consistent import style across the codebase
- Easier to move files without breaking imports
- Better IDE support for auto-imports
- Clearer understanding of where imports come from
This commit is contained in:
Félix Malfait
2025-12-23 22:57:51 +01:00
committed by GitHub
parent 781b96e80b
commit b27a97f2c5
725 changed files with 1114 additions and 1041 deletions
@@ -1,6 +1,6 @@
import { type ViewFilter } from '@/views/types/ViewFilter';
import { ViewFilterOperand } from 'twenty-shared/types';
import { areViewFiltersEqual } from '../areViewFiltersEqual';
import { areViewFiltersEqual } from '@/views/utils/areViewFiltersEqual';
describe('areViewFiltersEqual', () => {
const baseFilter: ViewFilter = {
@@ -1,6 +1,6 @@
import { type ViewFilter } from '@/views/types/ViewFilter';
import { ViewFilterOperand } from 'twenty-shared/types';
import { getViewFiltersToCreate } from '../getViewFiltersToCreate';
import { getViewFiltersToCreate } from '@/views/utils/getViewFiltersToCreate';
describe('getViewFiltersToCreate', () => {
const baseFilter: ViewFilter = {
@@ -1,6 +1,6 @@
import { type ViewFilter } from '@/views/types/ViewFilter';
import { ViewFilterOperand } from 'twenty-shared/types';
import { getViewFiltersToDelete } from '../getViewFiltersToDelete';
import { getViewFiltersToDelete } from '@/views/utils/getViewFiltersToDelete';
describe('getViewFiltersToDelete', () => {
const baseFilter: ViewFilter = {
@@ -1,6 +1,6 @@
import { type ViewFilter } from '@/views/types/ViewFilter';
import { ViewFilterOperand } from 'twenty-shared/types';
import { getViewFiltersToUpdate } from '../getViewFiltersToUpdate';
import { getViewFiltersToUpdate } from '@/views/utils/getViewFiltersToUpdate';
describe('getViewFiltersToUpdate', () => {
const baseFilter: ViewFilter = {
@@ -1,6 +1,6 @@
import { type CoreViewSortEssential } from '@/views/types/CoreViewSortEssential';
import { ViewSortDirection } from '~/generated/graphql';
import { getViewSortsToCreate } from '../getViewSortsToCreate';
import { getViewSortsToCreate } from '@/views/utils/getViewSortsToCreate';
describe('getViewSortsToCreate', () => {
const baseSort: CoreViewSortEssential = {
@@ -1,6 +1,6 @@
import { type CoreViewSortEssential } from '@/views/types/CoreViewSortEssential';
import { ViewSortDirection } from '~/generated/graphql';
import { getViewSortsToDelete } from '../getViewSortsToDelete';
import { getViewSortsToDelete } from '@/views/utils/getViewSortsToDelete';
describe('getViewSortsToDelete', () => {
const baseSort: CoreViewSortEssential = {
@@ -1,6 +1,6 @@
import { type CoreViewSortEssential } from '@/views/types/CoreViewSortEssential';
import { ViewSortDirection } from '~/generated/graphql';
import { getViewSortsToUpdate } from '../getViewSortsToUpdate';
import { getViewSortsToUpdate } from '@/views/utils/getViewSortsToUpdate';
describe('getViewSortsToUpdate', () => {
const baseSort: CoreViewSortEssential = {
@@ -1,7 +1,7 @@
import { type FieldMetadata } from '@/object-record/record-field/ui/types/FieldMetadata';
import { type ColumnDefinition } from '@/object-record/record-table/types/ColumnDefinition';
import { type ViewField } from '../types/ViewField';
import { type ViewField } from '@/views/types/ViewField';
export const mapColumnDefinitionsToViewFields = (
columnDefinitions: ColumnDefinition<FieldMetadata>[],
@@ -5,7 +5,7 @@ import { moveArrayItem } from '~/utils/array/moveArrayItem';
import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull';
import { isDefined } from 'twenty-shared/utils';
import { type ViewField } from '../types/ViewField';
import { type ViewField } from '@/views/types/ViewField';
export const mapViewFieldsToColumnDefinitions = ({
columnDefinitions,
@@ -6,7 +6,7 @@ import { isSystemSearchVectorField } from '@/object-record/utils/isSystemSearchV
import { type CompositeFieldSubFieldName } from '@/settings/data-model/types/CompositeFieldSubFieldName';
import { getFilterTypeFromFieldType, isDefined } from 'twenty-shared/utils';
import { type CoreViewFilter } from '~/generated/graphql';
import { type ViewFilter } from '../types/ViewFilter';
import { type ViewFilter } from '@/views/types/ViewFilter';
export const mapViewFiltersToFilters = (
viewFilters: ViewFilter[] | CoreViewFilter[],