@quo-digital/eslint-config 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +217 -0
  2. package/index.js +102 -0
  3. package/package.json +12 -0
package/README.md ADDED
@@ -0,0 +1,217 @@
1
+ # @quo-digital/eslint-config
2
+
3
+ Configuración oficial y centralizada de ESLint para codigo basado en TypeScript.
4
+
5
+ Publicada en npm como: **@quo-digital/eslint-config**
6
+
7
+ ## 🎯 Objetivo
8
+
9
+ Estandarizar las reglas de calidad de código para:
10
+
11
+ - Garantizar consistencia entre repositorios
12
+ - Reducir conflictos en Pull Requests
13
+ - Elevar la calidad técnica del código
14
+ - Centralizar la gobernanza técnica
15
+ - Facilitar la escalabilidad del equipo
16
+
17
+ Esta configuración es la única fuente de verdad para las reglas de ESLint en los las instancias backend y frontend en Typescript.
18
+
19
+ ## 📦 Instalación
20
+
21
+ ### 1️⃣ Instalar el package
22
+
23
+ En la aplicacion o proyecto:
24
+
25
+ ```bash
26
+ npm install -D @quo-digital/eslint-config
27
+ ```
28
+
29
+ ### 2️⃣ Instalar dependencias requeridas (si no existen)
30
+
31
+ Este package depende de los siguientes paquetes como devDependencies:
32
+
33
+ ```bash
34
+ npm install -D \
35
+ eslint@^8 \
36
+ @typescript-eslint/parser@^8 \
37
+ @typescript-eslint/eslint-plugin@^8 \
38
+ eslint-plugin-sonarjs@^0.21.0 \
39
+ eslint-plugin-simple-import-sort \
40
+ eslint-plugin-unused-imports \
41
+ eslint-plugin-prettier \
42
+ eslint-config-prettier \
43
+ prettier
44
+ ```
45
+
46
+ Puedes verificar las dependencias requeridas con:
47
+
48
+ ```bash
49
+ npm info @quo-digital/eslint-config peerDependencies
50
+ ```
51
+
52
+ ## ⚙️ Configuración
53
+
54
+ Crear o reemplazar el archivo `.eslintrc.js` en el codigo con:
55
+
56
+ ```javascript
57
+ module.exports = {
58
+ root: true,
59
+ extends: ['@quo-digital/eslint-config'],
60
+ };
61
+ ```
62
+
63
+ > ⚠️ No agregar reglas locales salvo que exista una justificación técnica clara.
64
+ >
65
+ > Toda modificación debe realizarse en el repositorio central.
66
+
67
+ ## 📜 Scripts recomendados
68
+
69
+ Asegúrate de que el `package.json` de la instancia contenga:
70
+
71
+ ```json
72
+ {
73
+ "scripts": {
74
+ "lint": "eslint \"src/**/*.ts\" --fix",
75
+ "lint:check": "eslint \"src/**/*.ts\""
76
+ }
77
+ }
78
+ ```
79
+
80
+ ## 🔌 Extensiones recomendadas para IDEs
81
+
82
+ Para una mejor experiencia de desarrollo con feedback en tiempo real de ESLint:
83
+
84
+ ### VS Code y Cursor
85
+
86
+ Ambos editores comparten el ecosistema de extensiones de VS Code. Instala:
87
+
88
+ | Extensión | ID | Descripción |
89
+ |-----------|-----|-------------|
90
+ | **ESLint** | `dbaeumer.vscode-eslint` | Integración oficial de ESLint |
91
+ | **Prettier** | `esbenp.prettier-vscode` | Formateo de código (requerido por esta config) |
92
+
93
+ ```bash
94
+ # Instalación desde terminal (VS Code / Cursor)
95
+ code --install-extension dbaeumer.vscode-eslint
96
+ code --install-extension esbenp.prettier-vscode
97
+ ```
98
+
99
+ O busca "ESLint" y "Prettier" en la vista de extensiones (`Ctrl+Shift+X` / `Cmd+Shift+X`).
100
+
101
+ ### WebStorm
102
+
103
+ ESLint viene integrado. Actívalo en:
104
+
105
+ **Settings** → **Languages & Frameworks** → **JavaScript** → **Code Quality Tools** → **ESLint**
106
+
107
+ - Marca **Automatic ESLint configuration** o apunta a tu `.eslintrc.js`
108
+ - Opcional: habilita **Run eslint --fix on save**
109
+
110
+ ### Claude Code
111
+
112
+ Claude Code se ejecuta como extensión sobre VS Code, por lo que usa las mismas extensiones:
113
+
114
+ - Instala **ESLint** (`dbaeumer.vscode-eslint`) y **Prettier** (`esbenp.prettier-vscode`)
115
+ - Las reglas se aplicarán automáticamente al editar código
116
+
117
+ ## 🚀 Uso
118
+
119
+ ### Desarrollo local
120
+
121
+ ```bash
122
+ npm run lint
123
+ ```
124
+
125
+ Este comando:
126
+
127
+ - Ejecuta ESLint
128
+ - Corrige automáticamente errores auto-fixables
129
+ - Ordena imports
130
+ - Elimina imports no usados
131
+
132
+ ### Validación (CI / Pull Requests)
133
+
134
+ ```bash
135
+ npm run lint:check
136
+ ```
137
+
138
+ Este comando:
139
+
140
+ - Solo valida
141
+ - No modifica archivos
142
+ - Falla si existen errores
143
+ - Debe ejecutarse en el pipeline de CI/CD
144
+
145
+ ## 📐 Reglas principales incluidas
146
+
147
+ ### TypeScript
148
+
149
+ - Reglas recomendadas oficiales
150
+ - `@typescript-eslint/consistent-type-imports`
151
+ - No obliga `explicit-function-return-type` (decisión pragmática para NestJS)
152
+
153
+ ### Clean Code
154
+
155
+ - Eliminación automática de imports no usados
156
+ - Orden obligatorio de imports
157
+ - Control de complejidad cognitiva (sonarjs)
158
+
159
+ ### Buenas prácticas
160
+
161
+ - `console.log` prohibido
162
+ - Permitido `console.warn` y `console.error`
163
+ - Integración completa con Prettier
164
+
165
+ ## 🏗️ Migración en aplicativos existentes
166
+
167
+ 1. Instalar el package
168
+ 2. Configurar `.eslintrc.js`
169
+ 3. Ejecutar:
170
+
171
+ ```bash
172
+ npm run lint
173
+ ```
174
+
175
+ 4. Corregir errores no auto-fixables
176
+ 5. Validar con:
177
+
178
+ ```bash
179
+ npm run lint:check
180
+ ```
181
+
182
+ ## 🔐 Requisitos
183
+
184
+ - Node 18+
185
+ - ESLint 8.x
186
+ - TypeScript 5.x
187
+
188
+ ## 🔄 Versionado
189
+
190
+ Este package sigue versionado semántico:
191
+
192
+ - **MAJOR** → cambios breaking en reglas
193
+ - **MINOR** → nuevas reglas no breaking
194
+ - **PATCH** → ajustes internos
195
+
196
+ Actualizar en una instancia de node:
197
+
198
+ ```bash
199
+ npm update @quo-digital/eslint-config
200
+ ```
201
+
202
+ Instalar versión específica:
203
+
204
+ ```bash
205
+ npm install -D @quo-digital/eslint-config@1.0.2
206
+ ```
207
+
208
+ ## 🧠 Gobernanza Técnica
209
+
210
+ Cualquier modificación en las reglas debe:
211
+
212
+ - Justificarse técnicamente
213
+ - Evaluar impacto en todos las aplicaciones
214
+ - Versionarse correctamente
215
+ - Documentarse
216
+
217
+ Esta configuración es el estándar oficial para backend y frontend basados en Typescript.
package/index.js ADDED
@@ -0,0 +1,102 @@
1
+ module.exports = {
2
+ parser: '@typescript-eslint/parser',
3
+
4
+ parserOptions: {
5
+ project: 'tsconfig.json',
6
+ tsconfigRootDir: process.cwd(),
7
+ },
8
+
9
+ env: {
10
+ node: true,
11
+ jest: true,
12
+ },
13
+
14
+ plugins: [
15
+ '@typescript-eslint',
16
+ 'unused-imports',
17
+ 'simple-import-sort',
18
+ 'sonarjs',
19
+ 'prettier',
20
+ ],
21
+
22
+ extends: [
23
+ 'eslint:recommended',
24
+ 'plugin:@typescript-eslint/recommended',
25
+ 'plugin:sonarjs/recommended',
26
+
27
+ /**
28
+ * Prettier integration
29
+ * MUST be last
30
+ */
31
+ 'plugin:prettier/recommended',
32
+ 'prettier',
33
+ ],
34
+
35
+ rules: {
36
+ /**
37
+ * =========================
38
+ * TypeScript
39
+ * =========================
40
+ */
41
+ '@typescript-eslint/consistent-type-imports': 'error',
42
+ '@typescript-eslint/explicit-function-return-type': 'off',
43
+
44
+ // Disable base rule to avoid duplication
45
+ '@typescript-eslint/no-unused-vars': 'off',
46
+
47
+ /**
48
+ * =========================
49
+ * Unused Handling
50
+ * =========================
51
+ */
52
+ 'unused-imports/no-unused-imports': 'error',
53
+
54
+ 'unused-imports/no-unused-vars': [
55
+ 'error',
56
+ {
57
+ vars: 'all',
58
+ varsIgnorePattern: '^_',
59
+ args: 'after-used',
60
+ argsIgnorePattern: '^_',
61
+ },
62
+ ],
63
+
64
+ /**
65
+ * =========================
66
+ * Clean Code
67
+ * =========================
68
+ */
69
+ 'simple-import-sort/imports': 'error',
70
+ 'simple-import-sort/exports': 'error',
71
+
72
+ 'sonarjs/cognitive-complexity': ['warn', 15],
73
+
74
+ /**
75
+ * =========================
76
+ * Best Practices
77
+ * =========================
78
+ */
79
+ 'no-console': ['warn', { allow: ['warn', 'error'] }],
80
+
81
+ /**
82
+ * =========================
83
+ * Prettier enforcement
84
+ * =========================
85
+ */
86
+ 'prettier/prettier': 'error',
87
+ },
88
+
89
+ /**
90
+ * =========================
91
+ * Overrides for specific files
92
+ * =========================
93
+ */
94
+ overrides: [
95
+ {
96
+ files: ['*.spec.ts', '*.test.ts'],
97
+ rules: {
98
+ '@typescript-eslint/no-explicit-any': 'off',
99
+ },
100
+ },
101
+ ],
102
+ };
package/package.json ADDED
@@ -0,0 +1,12 @@
1
+ {
2
+ "name": "@quo-digital/eslint-config",
3
+ "version": "1.0.2",
4
+ "description": "Configuración ESLint Estandar para Quo Digital",
5
+ "main": "index.js",
6
+ "license": "MIT",
7
+ "peerDependencies": {
8
+ "@typescript-eslint/eslint-plugin": ">=8",
9
+ "@typescript-eslint/parser": ">=8",
10
+ "eslint": ">=8"
11
+ }
12
+ }