@skapxd/eslint-opinionated 3.0.0 → 4.0.0
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.
- package/README.md +4 -1
- package/dist/astro/index.d.mts +52 -45
- package/dist/astro/index.d.ts +52 -45
- package/dist/astro/index.js +2 -0
- package/dist/astro/index.js.map +1 -1
- package/dist/astro/index.mjs +2 -2
- package/dist/{chunk-PDE4244X.mjs → chunk-24YEIN4M.mjs} +2 -2
- package/dist/chunk-24YEIN4M.mjs.map +1 -0
- package/dist/{chunk-EZWYBV2K.mjs → chunk-LHB5QN6B.mjs} +781 -12
- package/dist/chunk-LHB5QN6B.mjs.map +1 -0
- package/dist/{chunk-2PDLILVN.mjs → chunk-SU7QO6Z2.mjs} +3 -1
- package/dist/chunk-SU7QO6Z2.mjs.map +1 -0
- package/dist/{chunk-WMGL4DXL.mjs → chunk-T6OT6UUF.mjs} +2 -2
- package/dist/chunk-T6OT6UUF.mjs.map +1 -0
- package/dist/{chunk-4S3RPDX7.mjs → chunk-ZLLDTBKQ.mjs} +2 -2
- package/dist/chunk-ZLLDTBKQ.mjs.map +1 -0
- package/dist/cli.js +1551 -3388
- package/dist/cli.js.map +1 -1
- package/dist/cli.mjs +1550 -3387
- package/dist/cli.mjs.map +1 -1
- package/dist/index.d.mts +1460 -22
- package/dist/index.d.ts +1460 -22
- package/dist/index.js +791 -16
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +14 -10
- package/dist/index.mjs.map +1 -1
- package/dist/nest/index.d.mts +60 -55
- package/dist/nest/index.d.ts +60 -55
- package/dist/nest/index.js +2 -0
- package/dist/nest/index.js.map +1 -1
- package/dist/nest/index.mjs +2 -2
- package/dist/next/index.d.mts +58 -51
- package/dist/next/index.d.ts +58 -51
- package/dist/next/index.js +2 -0
- package/dist/next/index.js.map +1 -1
- package/dist/next/index.mjs +2 -2
- package/dist/rules-BI9wL85g.d.ts +68 -0
- package/dist/rules-C6E7Lk2q.d.mts +68 -0
- package/dist/shared/index.d.mts +149 -139
- package/dist/shared/index.d.ts +149 -139
- package/dist/shared/index.js +782 -11
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/index.mjs +2 -2
- package/dist/types-CYktcbmS.d.mts +83 -0
- package/dist/types-CYktcbmS.d.ts +83 -0
- package/package.json +8 -4
- package/dist/chunk-2PDLILVN.mjs.map +0 -1
- package/dist/chunk-4S3RPDX7.mjs.map +0 -1
- package/dist/chunk-EZWYBV2K.mjs.map +0 -1
- package/dist/chunk-PDE4244X.mjs.map +0 -1
- package/dist/chunk-WMGL4DXL.mjs.map +0 -1
- package/dist/rules-qISQhAKV.d.mts +0 -5
- package/dist/rules-qISQhAKV.d.ts +0 -5
package/README.md
CHANGED
|
@@ -39,7 +39,7 @@ Los enlaces apuntan a GitHub de forma absoluta para que funcionen tambien desde
|
|
|
39
39
|
| [Adopcion incremental y legacy](https://github.com/skapxd/eslint-opinionated/blob/main/docs/adopcion-legacy.md) | Lint sobre cambios, olas de adopcion, overrides y propuestas de reglas. |
|
|
40
40
|
| [Pipeline Result](https://github.com/skapxd/eslint-opinionated/blob/main/docs/pipeline-result.md) | Como encajan @skapxd/result, ts-pattern y el trace global. |
|
|
41
41
|
| [Notas type-aware](https://github.com/skapxd/eslint-opinionated/blob/main/docs/notas-type-aware.md) | Supuestos, limites conocidos y notas de reglas que dependen del checker. |
|
|
42
|
-
| [Indice de reglas](https://github.com/skapxd/eslint-opinionated/blob/main/docs/reglas/README.md) | Las
|
|
42
|
+
| [Indice de reglas](https://github.com/skapxd/eslint-opinionated/blob/main/docs/reglas/README.md) | Las 53 fichas individuales en docs/reglas/. |
|
|
43
43
|
|
|
44
44
|
## Reglas
|
|
45
45
|
|
|
@@ -65,6 +65,7 @@ Los enlaces apuntan a GitHub de forma absoluta para que funcionen tambien desde
|
|
|
65
65
|
| [`skapxd/nest-no-swagger-in-controllers`](https://github.com/skapxd/eslint-opinionated/blob/main/docs/reglas/nest-no-swagger-in-controllers.md) | Los controllers no se llenan de decoradores de swagger; el plugin introspecciona los DTOs. Preset `nest`. |
|
|
66
66
|
| [`skapxd/nest-requires-swagger-plugin`](https://github.com/skapxd/eslint-opinionated/blob/main/docs/reglas/nest-requires-swagger-plugin.md) | `nest-cli.json` debe tener el plugin `@nestjs/swagger`: la premisa de las reglas de swagger, verificada. Preset `nest`. |
|
|
67
67
|
| [`skapxd/nest-validation-pipe-config`](https://github.com/skapxd/eslint-opinionated/blob/main/docs/reglas/nest-validation-pipe-config.md) | Todo `new ValidationPipe` configura `transform` y `whitelist`: la premisa de las reglas de DTOs. Preset `nest`. |
|
|
68
|
+
| [`skapxd/nested-function-requires-capture`](https://github.com/skapxd/eslint-opinionated/blob/main/docs/reglas/nested-function-requires-capture.md) | Una funcion anidada nombrada debe capturar scope local; si no, es un helper extraible. Preset `shared`, en `error`. |
|
|
68
69
|
| [`skapxd/no-anonymous-condition`](https://github.com/skapxd/eslint-opinionated/blob/main/docs/reglas/no-anonymous-condition.md) | El `if` solo acepta condiciones ya nombradas; todo cómputo (llamada, comparación, `&&`/`||`) se extrae a una `const` con nombre semántico. |
|
|
69
70
|
| [`skapxd/no-deep-relative-imports`](https://github.com/skapxd/eslint-opinionated/blob/main/docs/reglas/no-deep-relative-imports.md) | Limita la profundidad de los imports relativos (`../`). |
|
|
70
71
|
| [`skapxd/no-default-export`](https://github.com/skapxd/eslint-opinionated/blob/main/docs/reglas/no-default-export.md) | Prohíbe `export default`; el nombre del símbolo es el contrato. Exime configs/stories y, en el preset `next`, los entrypoints del App Router. |
|
|
@@ -86,6 +87,7 @@ Los enlaces apuntan a GitHub de forma absoluta para que funcionen tambien desde
|
|
|
86
87
|
| [`skapxd/no-silenced-compiler`](https://github.com/skapxd/eslint-opinionated/blob/main/docs/reglas/no-silenced-compiler.md) | Prohíbe `@ts-ignore`/`@ts-nocheck`: silenciar la alarma no arregla el incendio. `@ts-expect-error` con descripción queda para tests de tipos. Wrapper de `ban-ts-comment`. |
|
|
87
88
|
| [`skapxd/no-tunnel-props`](https://github.com/skapxd/eslint-opinionated/blob/main/docs/reglas/no-tunnel-props.md) | Ninguna prop viaja más de un nivel: quien la recibe no puede reenviarla a otro componente. Mata el prop drilling. |
|
|
88
89
|
| [`skapxd/prefer-abort-signal`](https://github.com/skapxd/eslint-opinionated/blob/main/docs/reglas/prefer-abort-signal.md) | Listeners en efectos se limpian con `AbortController` (`{ signal }` + `abort()`), no con `removeEventListener`. |
|
|
90
|
+
| [`skapxd/prefer-node-protocol-for-builtins`](https://github.com/skapxd/eslint-opinionated/blob/main/docs/reglas/prefer-node-protocol-for-builtins.md) | Builtins de Node siempre con protocolo `node:`: separa runtime de npm y evita ambigüedad cross-runtime. |
|
|
89
91
|
| [`skapxd/prefer-tagged-union-state`](https://github.com/skapxd/eslint-opinionated/blob/main/docs/reglas/prefer-tagged-union-state.md) | Prohíbe estados inconsistentes representables: flag de loading + campo de error independientes → unión etiquetada. |
|
|
90
92
|
| [`skapxd/prefer-type-over-interface`](https://github.com/skapxd/eslint-opinionated/blob/main/docs/reglas/prefer-type-over-interface.md) | Las uniones discriminadas son types; un `type` no crece en silencio por declaration merging. Wrapper de `consistent-type-definitions`. |
|
|
91
93
|
| [`skapxd/no-functions-inside-components`](https://github.com/skapxd/eslint-opinionated/blob/main/docs/reglas/no-functions-inside-components.md) | Prohíbe definir funciones dentro de componentes React. |
|
|
@@ -95,6 +97,7 @@ Los enlaces apuntan a GitHub de forma absoluta para que funcionen tambien desde
|
|
|
95
97
|
| [`skapxd/package-requires-typed-exports`](https://github.com/skapxd/eslint-opinionated/blob/main/docs/reglas/package-requires-typed-exports.md) | Los `exports` del package.json declaran `types` por condición (`import` → `.d.mts`, `require` → `.d.ts`): mata el bug FalseCJS. Preset `package`. |
|
|
96
98
|
| [`skapxd/untrusted-module-requires-adapter`](https://github.com/skapxd/eslint-opinionated/blob/main/docs/reglas/untrusted-module-requires-adapter.md) | Los paquetes con tipos mentirosos (@types desfasados) solo se importan desde su adaptador: la mentira vive en UN archivo. Preset `package`. |
|
|
97
99
|
| [`skapxd/no-jsx-ternary-null`](https://github.com/skapxd/eslint-opinionated/blob/main/docs/reglas/no-jsx-ternary-null.md) | Prefiere `cond && <El />` sobre `cond ? <El /> : null` en JSX. |
|
|
100
|
+
| [`skapxd/repeated-jsx-requires-component`](https://github.com/skapxd/eslint-opinionated/blob/main/docs/reglas/repeated-jsx-requires-component.md) | Detecta patrones JSX repetidos tres veces que ya son un componente sin nombre. |
|
|
98
101
|
|
|
99
102
|
## Licencia
|
|
100
103
|
|
package/dist/astro/index.d.mts
CHANGED
|
@@ -1,61 +1,68 @@
|
|
|
1
1
|
import * as typescript_eslint from 'typescript-eslint';
|
|
2
|
+
import { O as OpinionatedPluginReference } from '../types-CYktcbmS.mjs';
|
|
3
|
+
import 'eslint';
|
|
4
|
+
import '@typescript-eslint/utils';
|
|
2
5
|
|
|
3
|
-
declare function createAstroConfigs(pluginReference:
|
|
6
|
+
declare function createAstroConfigs(pluginReference: OpinionatedPluginReference): ({
|
|
4
7
|
files: string[];
|
|
5
8
|
languageOptions: {
|
|
6
9
|
parser: typescript_eslint.CompatibleParser;
|
|
7
10
|
};
|
|
8
11
|
name: string;
|
|
9
12
|
plugins: {
|
|
10
|
-
skapxd:
|
|
13
|
+
skapxd: OpinionatedPluginReference;
|
|
11
14
|
};
|
|
12
15
|
rules: {
|
|
13
|
-
"skapxd/class-properties-require-readonly":
|
|
14
|
-
"skapxd/max-public-methods":
|
|
15
|
-
"skapxd/no-accessors":
|
|
16
|
-
"skapxd/no-ad-hoc-ok-result":
|
|
17
|
-
"skapxd/no-anonymous-condition":
|
|
18
|
-
"skapxd/no-deep-relative-imports":
|
|
19
|
-
"skapxd/no-default-export":
|
|
20
|
-
"skapxd/no-else":
|
|
21
|
-
"skapxd/no-emoji":
|
|
22
|
-
"skapxd/no-nested-if":
|
|
23
|
-
"skapxd/
|
|
24
|
-
"skapxd/no-
|
|
25
|
-
"skapxd/no-
|
|
26
|
-
"skapxd/
|
|
27
|
-
"skapxd/
|
|
28
|
-
"skapxd/
|
|
29
|
-
"skapxd/prefer-
|
|
30
|
-
"skapxd/
|
|
31
|
-
"skapxd/
|
|
16
|
+
"skapxd/class-properties-require-readonly": "error";
|
|
17
|
+
"skapxd/max-public-methods": "error";
|
|
18
|
+
"skapxd/no-accessors": "error";
|
|
19
|
+
"skapxd/no-ad-hoc-ok-result": "error";
|
|
20
|
+
"skapxd/no-anonymous-condition": "error";
|
|
21
|
+
"skapxd/no-deep-relative-imports": "error";
|
|
22
|
+
"skapxd/no-default-export": "error";
|
|
23
|
+
"skapxd/no-else": "error";
|
|
24
|
+
"skapxd/no-emoji": "error";
|
|
25
|
+
"skapxd/no-nested-if": "error";
|
|
26
|
+
"skapxd/nested-function-requires-capture": "error";
|
|
27
|
+
"skapxd/no-runtime-state-guard": "error";
|
|
28
|
+
"skapxd/no-promise-chain": "error";
|
|
29
|
+
"skapxd/no-try-catch": "error";
|
|
30
|
+
"skapxd/one-root-function-per-file": "error";
|
|
31
|
+
"skapxd/prefer-node-protocol-for-builtins": "error";
|
|
32
|
+
"skapxd/prefer-tagged-union-state": "error";
|
|
33
|
+
"skapxd/requires-strict-tsconfig": "error";
|
|
34
|
+
"skapxd/prefer-ts-pattern": "error";
|
|
35
|
+
"skapxd/result-error-requires-cause": "error";
|
|
36
|
+
"skapxd/result-error-requires-handling": "error";
|
|
32
37
|
};
|
|
33
38
|
} | {
|
|
34
39
|
files: string[];
|
|
35
40
|
name: string;
|
|
36
41
|
plugins: {
|
|
37
|
-
skapxd:
|
|
42
|
+
skapxd: OpinionatedPluginReference;
|
|
38
43
|
};
|
|
39
44
|
rules: {
|
|
40
|
-
"skapxd/class-properties-require-readonly":
|
|
41
|
-
"skapxd/max-public-methods":
|
|
42
|
-
"skapxd/no-accessors":
|
|
43
|
-
"skapxd/no-ad-hoc-ok-result":
|
|
44
|
-
"skapxd/no-anonymous-condition":
|
|
45
|
-
"skapxd/no-deep-relative-imports":
|
|
46
|
-
"skapxd/no-default-export":
|
|
47
|
-
"skapxd/no-else":
|
|
48
|
-
"skapxd/no-emoji":
|
|
49
|
-
"skapxd/no-nested-if":
|
|
50
|
-
"skapxd/
|
|
51
|
-
"skapxd/no-
|
|
52
|
-
"skapxd/no-
|
|
53
|
-
"skapxd/
|
|
54
|
-
"skapxd/
|
|
55
|
-
"skapxd/
|
|
56
|
-
"skapxd/prefer-
|
|
57
|
-
"skapxd/
|
|
58
|
-
"skapxd/
|
|
45
|
+
"skapxd/class-properties-require-readonly": "error";
|
|
46
|
+
"skapxd/max-public-methods": "error";
|
|
47
|
+
"skapxd/no-accessors": "error";
|
|
48
|
+
"skapxd/no-ad-hoc-ok-result": "error";
|
|
49
|
+
"skapxd/no-anonymous-condition": "error";
|
|
50
|
+
"skapxd/no-deep-relative-imports": "error";
|
|
51
|
+
"skapxd/no-default-export": "error";
|
|
52
|
+
"skapxd/no-else": "error";
|
|
53
|
+
"skapxd/no-emoji": "error";
|
|
54
|
+
"skapxd/no-nested-if": "error";
|
|
55
|
+
"skapxd/nested-function-requires-capture": "error";
|
|
56
|
+
"skapxd/no-runtime-state-guard": "error";
|
|
57
|
+
"skapxd/no-promise-chain": "error";
|
|
58
|
+
"skapxd/no-try-catch": "error";
|
|
59
|
+
"skapxd/one-root-function-per-file": "error";
|
|
60
|
+
"skapxd/prefer-node-protocol-for-builtins": "error";
|
|
61
|
+
"skapxd/prefer-tagged-union-state": "error";
|
|
62
|
+
"skapxd/requires-strict-tsconfig": "error";
|
|
63
|
+
"skapxd/prefer-ts-pattern": "error";
|
|
64
|
+
"skapxd/result-error-requires-cause": "error";
|
|
65
|
+
"skapxd/result-error-requires-handling": "error";
|
|
59
66
|
};
|
|
60
67
|
languageOptions?: undefined;
|
|
61
68
|
} | {
|
|
@@ -68,12 +75,12 @@ declare function createAstroConfigs(pluginReference: unknown): ({
|
|
|
68
75
|
};
|
|
69
76
|
name: string;
|
|
70
77
|
plugins: {
|
|
71
|
-
skapxd:
|
|
78
|
+
skapxd: OpinionatedPluginReference;
|
|
72
79
|
};
|
|
73
80
|
rules: {
|
|
74
|
-
"skapxd/await-requires-result":
|
|
75
|
-
"skapxd/result-error-requires-cause":
|
|
76
|
-
"skapxd/result-error-requires-handling":
|
|
81
|
+
"skapxd/await-requires-result": "error";
|
|
82
|
+
"skapxd/result-error-requires-cause": "error";
|
|
83
|
+
"skapxd/result-error-requires-handling": "error";
|
|
77
84
|
};
|
|
78
85
|
})[];
|
|
79
86
|
|
package/dist/astro/index.d.ts
CHANGED
|
@@ -1,61 +1,68 @@
|
|
|
1
1
|
import * as typescript_eslint from 'typescript-eslint';
|
|
2
|
+
import { O as OpinionatedPluginReference } from '../types-CYktcbmS.js';
|
|
3
|
+
import 'eslint';
|
|
4
|
+
import '@typescript-eslint/utils';
|
|
2
5
|
|
|
3
|
-
declare function createAstroConfigs(pluginReference:
|
|
6
|
+
declare function createAstroConfigs(pluginReference: OpinionatedPluginReference): ({
|
|
4
7
|
files: string[];
|
|
5
8
|
languageOptions: {
|
|
6
9
|
parser: typescript_eslint.CompatibleParser;
|
|
7
10
|
};
|
|
8
11
|
name: string;
|
|
9
12
|
plugins: {
|
|
10
|
-
skapxd:
|
|
13
|
+
skapxd: OpinionatedPluginReference;
|
|
11
14
|
};
|
|
12
15
|
rules: {
|
|
13
|
-
"skapxd/class-properties-require-readonly":
|
|
14
|
-
"skapxd/max-public-methods":
|
|
15
|
-
"skapxd/no-accessors":
|
|
16
|
-
"skapxd/no-ad-hoc-ok-result":
|
|
17
|
-
"skapxd/no-anonymous-condition":
|
|
18
|
-
"skapxd/no-deep-relative-imports":
|
|
19
|
-
"skapxd/no-default-export":
|
|
20
|
-
"skapxd/no-else":
|
|
21
|
-
"skapxd/no-emoji":
|
|
22
|
-
"skapxd/no-nested-if":
|
|
23
|
-
"skapxd/
|
|
24
|
-
"skapxd/no-
|
|
25
|
-
"skapxd/no-
|
|
26
|
-
"skapxd/
|
|
27
|
-
"skapxd/
|
|
28
|
-
"skapxd/
|
|
29
|
-
"skapxd/prefer-
|
|
30
|
-
"skapxd/
|
|
31
|
-
"skapxd/
|
|
16
|
+
"skapxd/class-properties-require-readonly": "error";
|
|
17
|
+
"skapxd/max-public-methods": "error";
|
|
18
|
+
"skapxd/no-accessors": "error";
|
|
19
|
+
"skapxd/no-ad-hoc-ok-result": "error";
|
|
20
|
+
"skapxd/no-anonymous-condition": "error";
|
|
21
|
+
"skapxd/no-deep-relative-imports": "error";
|
|
22
|
+
"skapxd/no-default-export": "error";
|
|
23
|
+
"skapxd/no-else": "error";
|
|
24
|
+
"skapxd/no-emoji": "error";
|
|
25
|
+
"skapxd/no-nested-if": "error";
|
|
26
|
+
"skapxd/nested-function-requires-capture": "error";
|
|
27
|
+
"skapxd/no-runtime-state-guard": "error";
|
|
28
|
+
"skapxd/no-promise-chain": "error";
|
|
29
|
+
"skapxd/no-try-catch": "error";
|
|
30
|
+
"skapxd/one-root-function-per-file": "error";
|
|
31
|
+
"skapxd/prefer-node-protocol-for-builtins": "error";
|
|
32
|
+
"skapxd/prefer-tagged-union-state": "error";
|
|
33
|
+
"skapxd/requires-strict-tsconfig": "error";
|
|
34
|
+
"skapxd/prefer-ts-pattern": "error";
|
|
35
|
+
"skapxd/result-error-requires-cause": "error";
|
|
36
|
+
"skapxd/result-error-requires-handling": "error";
|
|
32
37
|
};
|
|
33
38
|
} | {
|
|
34
39
|
files: string[];
|
|
35
40
|
name: string;
|
|
36
41
|
plugins: {
|
|
37
|
-
skapxd:
|
|
42
|
+
skapxd: OpinionatedPluginReference;
|
|
38
43
|
};
|
|
39
44
|
rules: {
|
|
40
|
-
"skapxd/class-properties-require-readonly":
|
|
41
|
-
"skapxd/max-public-methods":
|
|
42
|
-
"skapxd/no-accessors":
|
|
43
|
-
"skapxd/no-ad-hoc-ok-result":
|
|
44
|
-
"skapxd/no-anonymous-condition":
|
|
45
|
-
"skapxd/no-deep-relative-imports":
|
|
46
|
-
"skapxd/no-default-export":
|
|
47
|
-
"skapxd/no-else":
|
|
48
|
-
"skapxd/no-emoji":
|
|
49
|
-
"skapxd/no-nested-if":
|
|
50
|
-
"skapxd/
|
|
51
|
-
"skapxd/no-
|
|
52
|
-
"skapxd/no-
|
|
53
|
-
"skapxd/
|
|
54
|
-
"skapxd/
|
|
55
|
-
"skapxd/
|
|
56
|
-
"skapxd/prefer-
|
|
57
|
-
"skapxd/
|
|
58
|
-
"skapxd/
|
|
45
|
+
"skapxd/class-properties-require-readonly": "error";
|
|
46
|
+
"skapxd/max-public-methods": "error";
|
|
47
|
+
"skapxd/no-accessors": "error";
|
|
48
|
+
"skapxd/no-ad-hoc-ok-result": "error";
|
|
49
|
+
"skapxd/no-anonymous-condition": "error";
|
|
50
|
+
"skapxd/no-deep-relative-imports": "error";
|
|
51
|
+
"skapxd/no-default-export": "error";
|
|
52
|
+
"skapxd/no-else": "error";
|
|
53
|
+
"skapxd/no-emoji": "error";
|
|
54
|
+
"skapxd/no-nested-if": "error";
|
|
55
|
+
"skapxd/nested-function-requires-capture": "error";
|
|
56
|
+
"skapxd/no-runtime-state-guard": "error";
|
|
57
|
+
"skapxd/no-promise-chain": "error";
|
|
58
|
+
"skapxd/no-try-catch": "error";
|
|
59
|
+
"skapxd/one-root-function-per-file": "error";
|
|
60
|
+
"skapxd/prefer-node-protocol-for-builtins": "error";
|
|
61
|
+
"skapxd/prefer-tagged-union-state": "error";
|
|
62
|
+
"skapxd/requires-strict-tsconfig": "error";
|
|
63
|
+
"skapxd/prefer-ts-pattern": "error";
|
|
64
|
+
"skapxd/result-error-requires-cause": "error";
|
|
65
|
+
"skapxd/result-error-requires-handling": "error";
|
|
59
66
|
};
|
|
60
67
|
languageOptions?: undefined;
|
|
61
68
|
} | {
|
|
@@ -68,12 +75,12 @@ declare function createAstroConfigs(pluginReference: unknown): ({
|
|
|
68
75
|
};
|
|
69
76
|
name: string;
|
|
70
77
|
plugins: {
|
|
71
|
-
skapxd:
|
|
78
|
+
skapxd: OpinionatedPluginReference;
|
|
72
79
|
};
|
|
73
80
|
rules: {
|
|
74
|
-
"skapxd/await-requires-result":
|
|
75
|
-
"skapxd/result-error-requires-cause":
|
|
76
|
-
"skapxd/result-error-requires-handling":
|
|
81
|
+
"skapxd/await-requires-result": "error";
|
|
82
|
+
"skapxd/result-error-requires-cause": "error";
|
|
83
|
+
"skapxd/result-error-requires-handling": "error";
|
|
77
84
|
};
|
|
78
85
|
})[];
|
|
79
86
|
|
package/dist/astro/index.js
CHANGED
|
@@ -49,10 +49,12 @@ var baseRules = {
|
|
|
49
49
|
"skapxd/no-else": "error",
|
|
50
50
|
"skapxd/no-emoji": "error",
|
|
51
51
|
"skapxd/no-nested-if": "error",
|
|
52
|
+
"skapxd/nested-function-requires-capture": "error",
|
|
52
53
|
"skapxd/no-runtime-state-guard": "error",
|
|
53
54
|
"skapxd/no-promise-chain": "error",
|
|
54
55
|
"skapxd/no-try-catch": "error",
|
|
55
56
|
"skapxd/one-root-function-per-file": "error",
|
|
57
|
+
"skapxd/prefer-node-protocol-for-builtins": "error",
|
|
56
58
|
"skapxd/prefer-tagged-union-state": "error",
|
|
57
59
|
"skapxd/requires-strict-tsconfig": "error",
|
|
58
60
|
"skapxd/prefer-ts-pattern": "error",
|
package/dist/astro/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/astro/index.ts","../../src/shared/configs/base-rules.ts","../../src/shared/configs/create-base-language-options.ts","../../src/shared/configs/create-typed-language-options.ts","../../src/astro/configs.ts"],"sourcesContent":["export { createAstroConfigs } from \"./configs\";\n","
|
|
1
|
+
{"version":3,"sources":["../../src/astro/index.ts","../../src/shared/configs/base-rules.ts","../../src/shared/configs/create-base-language-options.ts","../../src/shared/configs/create-typed-language-options.ts","../../src/astro/configs.ts"],"sourcesContent":["export { createAstroConfigs } from \"./configs\";\n","import type { Linter } from \"eslint\";\n\nexport const baseRules = {\n \"skapxd/class-properties-require-readonly\": \"error\",\n \"skapxd/max-public-methods\": \"error\",\n \"skapxd/no-accessors\": \"error\",\n \"skapxd/no-ad-hoc-ok-result\": \"error\",\n // En las bases por decisión del dueño (issue #2): con poca adopción\n // todavía, es el momento de subir la vara; los legacy la apagan en su\n // lista de pendientes (playbook de adopción del README).\n \"skapxd/no-anonymous-condition\": \"error\",\n \"skapxd/no-deep-relative-imports\": \"error\",\n \"skapxd/no-default-export\": \"error\",\n \"skapxd/no-else\": \"error\",\n \"skapxd/no-emoji\": \"error\",\n \"skapxd/no-nested-if\": \"error\",\n \"skapxd/nested-function-requires-capture\": \"error\",\n \"skapxd/no-runtime-state-guard\": \"error\",\n \"skapxd/no-promise-chain\": \"error\",\n \"skapxd/no-try-catch\": \"error\",\n \"skapxd/one-root-function-per-file\": \"error\",\n \"skapxd/prefer-node-protocol-for-builtins\": \"error\",\n \"skapxd/prefer-tagged-union-state\": \"error\",\n \"skapxd/requires-strict-tsconfig\": \"error\",\n \"skapxd/prefer-ts-pattern\": \"error\",\n \"skapxd/result-error-requires-cause\": \"error\",\n \"skapxd/result-error-requires-handling\": \"error\",\n} satisfies Linter.RulesRecord;\n","import tseslint from \"typescript-eslint\";\n\n// Variante sin type-checking: solo el parser, para presets que aplican a TS\n// pero no necesitan projectService (base, package, next/base, next/react).\nexport function createBaseLanguageOptions() {\n return {\n parser: tseslint.parser,\n };\n}\n","import tseslint from \"typescript-eslint\";\n\nexport function createTypedLanguageOptions() {\n return {\n // Sin el parser explícito, un consumidor que use solo estos presets\n // obtiene \"Parsing error\" en cada archivo TS (espree no parsea TS).\n parser: tseslint.parser,\n parserOptions: {\n projectService: true,\n },\n };\n}\n","import {\n baseRules,\n createBaseLanguageOptions,\n createTypedLanguageOptions,\n type OpinionatedConfigList,\n type OpinionatedPluginReference,\n} from \"#/shared/configs\";\n\nexport function createAstroConfigs(\n pluginReference: OpinionatedPluginReference,\n) {\n const baseLanguageOptions = createBaseLanguageOptions();\n const typedLanguageOptions = createTypedLanguageOptions();\n\n return [\n {\n files: [\"src/**/*.{ts,tsx}\"],\n languageOptions: baseLanguageOptions,\n name: \"skapxd/astro/base\",\n plugins: { skapxd: pluginReference },\n rules: baseRules,\n },\n // Los .astro no llevan parser propio: lo aporta eslint-plugin-astro,\n // que el consumidor debe tener configurado.\n {\n files: [\"src/**/*.astro\"],\n name: \"skapxd/astro/astro-files\",\n plugins: { skapxd: pluginReference },\n rules: baseRules,\n },\n {\n files: [\"src/**/*.{ts,tsx}\"],\n languageOptions: typedLanguageOptions,\n name: \"skapxd/astro/typescript\",\n plugins: { skapxd: pluginReference },\n rules: {\n \"skapxd/await-requires-result\": \"error\",\n \"skapxd/result-error-requires-cause\": \"error\",\n \"skapxd/result-error-requires-handling\": \"error\",\n },\n },\n ] satisfies OpinionatedConfigList;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACEO,IAAM,YAAY;AAAA,EACvB,4CAA4C;AAAA,EAC5C,6BAA6B;AAAA,EAC7B,uBAAuB;AAAA,EACvB,8BAA8B;AAAA;AAAA;AAAA;AAAA,EAI9B,iCAAiC;AAAA,EACjC,mCAAmC;AAAA,EACnC,4BAA4B;AAAA,EAC5B,kBAAkB;AAAA,EAClB,mBAAmB;AAAA,EACnB,uBAAuB;AAAA,EACvB,2CAA2C;AAAA,EAC3C,iCAAiC;AAAA,EACjC,2BAA2B;AAAA,EAC3B,uBAAuB;AAAA,EACvB,qCAAqC;AAAA,EACrC,4CAA4C;AAAA,EAC5C,oCAAoC;AAAA,EACpC,mCAAmC;AAAA,EACnC,4BAA4B;AAAA,EAC5B,sCAAsC;AAAA,EACtC,yCAAyC;AAC3C;;;AC3BA,+BAAqB;AAId,SAAS,4BAA4B;AAC1C,SAAO;AAAA,IACL,QAAQ,yBAAAA,QAAS;AAAA,EACnB;AACF;;;ACRA,IAAAC,4BAAqB;AAEd,SAAS,6BAA6B;AAC3C,SAAO;AAAA;AAAA;AAAA,IAGL,QAAQ,0BAAAC,QAAS;AAAA,IACjB,eAAe;AAAA,MACb,gBAAgB;AAAA,IAClB;AAAA,EACF;AACF;;;ACHO,SAAS,mBACd,iBACA;AACA,QAAM,sBAAsB,0BAA0B;AACtD,QAAM,uBAAuB,2BAA2B;AAExD,SAAO;AAAA,IACL;AAAA,MACE,OAAO,CAAC,mBAAmB;AAAA,MAC3B,iBAAiB;AAAA,MACjB,MAAM;AAAA,MACN,SAAS,EAAE,QAAQ,gBAAgB;AAAA,MACnC,OAAO;AAAA,IACT;AAAA;AAAA;AAAA,IAGA;AAAA,MACE,OAAO,CAAC,gBAAgB;AAAA,MACxB,MAAM;AAAA,MACN,SAAS,EAAE,QAAQ,gBAAgB;AAAA,MACnC,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,OAAO,CAAC,mBAAmB;AAAA,MAC3B,iBAAiB;AAAA,MACjB,MAAM;AAAA,MACN,SAAS,EAAE,QAAQ,gBAAgB;AAAA,MACnC,OAAO;AAAA,QACL,gCAAgC;AAAA,QAChC,sCAAsC;AAAA,QACtC,yCAAyC;AAAA,MAC3C;AAAA,IACF;AAAA,EACF;AACF;","names":["tseslint","import_typescript_eslint","tseslint"]}
|
package/dist/astro/index.mjs
CHANGED
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
baseRules,
|
|
3
3
|
createTypedLanguageOptions,
|
|
4
4
|
typeDrivenRules
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-SU7QO6Z2.mjs";
|
|
6
6
|
|
|
7
7
|
// src/constants/nest-entrypoint-file-patterns.ts
|
|
8
8
|
var nestEntrypointFilePatterns = [
|
|
@@ -130,4 +130,4 @@ function createNestConfigs(pluginReference) {
|
|
|
130
130
|
export {
|
|
131
131
|
createNestConfigs
|
|
132
132
|
};
|
|
133
|
-
//# sourceMappingURL=chunk-
|
|
133
|
+
//# sourceMappingURL=chunk-24YEIN4M.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/constants/nest-entrypoint-file-patterns.ts","../src/constants/nest-framework-hook-names.ts","../src/nest/configs.ts"],"sourcesContent":["// Entrypoints de un proyecto Nest donde exigir Promise<Result> no aplica:\n// el bootstrap debe crashear ruidoso, no modelar errores de dominio.\n// Globs (matchean en cualquier carpeta), basados en proyectos reales:\n// main.ts, main.module.ts/app.module.ts, instrumentation.ts, app-cluster.ts.\nexport const nestEntrypointFilePatterns = [\n \"src/main.ts\",\n \"src/app-cluster.ts\",\n \"src/instrumentation.ts\",\n];\n","// Métodos públicos que NO cuentan hacia el límite porque son callbacks del\n// framework (NestJS): los llama el container/router/HTTP layer, nunca el\n// código de negocio. Contarlos forzaría refactors sin semántica.\nexport const nestFrameworkHookNames = [\n // Lifecycle hooks — https://docs.nestjs.com/fundamentals/lifecycle-events\n \"onModuleInit\",\n \"onModuleDestroy\",\n \"onApplicationBootstrap\",\n \"onApplicationShutdown\",\n \"beforeApplicationShutdown\",\n // Interfaces del request pipeline\n \"canActivate\", // CanActivate (Guard)\n \"intercept\", // NestInterceptor\n \"transform\", // PipeTransform\n \"catch\", // ExceptionFilter\n \"use\", // NestMiddleware\n];\n","import { nestEntrypointFilePatterns } from \"#/constants/nest-entrypoint-file-patterns\";\nimport { nestFrameworkHookNames } from \"#/constants/nest-framework-hook-names\";\nimport {\n baseRules,\n createTypedLanguageOptions,\n type OpinionatedConfigList,\n type OpinionatedPluginReference,\n typeDrivenRules,\n} from \"#/shared/configs\";\n\nexport function createNestConfigs(\n pluginReference: OpinionatedPluginReference,\n) {\n const typedLanguageOptions = createTypedLanguageOptions();\n\n return [\n // El dominio completo (services, controllers, modules, guards, ...).\n // Las carpetas fuera de src (dev/, scripts/, e2e/, integration-test/)\n // quedan fuera del preset a propósito: no son la app.\n {\n files: [\"src/**/*.ts\"],\n languageOptions: typedLanguageOptions,\n name: \"skapxd/nest/base\",\n // Solo el plugin skapxd: las reglas de typescript-eslint entran\n // re-registradas bajo nuestro namespace (typeDrivenRules).\n plugins: { skapxd: pluginReference },\n rules: {\n ...baseRules,\n ...typeDrivenRules,\n // Nota: class-properties-require-readonly viene de las bases sin\n // override — la exención de la capa de persistencia es por\n // PROPIEDAD (decoradores @Prop/@Column verificados contra los\n // imports de @nestjs/mongoose/typeorm), no por nombre de archivo.\n // La regla agnóstica de las bases, con el conocimiento del\n // framework inyectado: los hooks de Nest (onModuleInit,\n // canActivate, intercept, ...) no cuentan como superficie pública.\n \"skapxd/max-public-methods\": [\n \"error\",\n { ignore: [...nestFrameworkHookNames] },\n ],\n // Todo await resuelve en Result, salvo los entrypoints (main.ts,\n // instrumentation): ahí el bootstrap debe crashear ruidoso.\n \"skapxd/await-requires-result\": [\n \"error\",\n { allowFilePatterns: [...nestEntrypointFilePatterns] },\n ],\n // El contrato HTTP se documenta en los DTOs (@ApiProperty), no en el\n // controller: el plugin @nestjs/swagger introspecciona el resto.\n \"skapxd/nest-dto-requires-api-property\": \"error\",\n // Los DTOs de input validan en runtime con class-validator (+ @Type\n // de class-transformer para anidados); los out-*/-response quedan\n // exentos: el server los produce, no los recibe.\n \"skapxd/nest-dto-requires-validation\": \"error\",\n // El controller es la frontera: consume el Result con match() y\n // traduce a DTO o HttpException. Devolverlo crudo serializa el\n // envelope { ok, error } al cliente.\n \"skapxd/nest-no-result-response\": \"error\",\n \"skapxd/nest-no-swagger-in-controllers\": \"error\",\n // Configuración del proyecto verificada por el lint: el plugin de\n // swagger en nest-cli.json (la premisa de las reglas de swagger) y\n // un ValidationPipe con transform + whitelist (la premisa de las\n // reglas de DTOs).\n \"skapxd/nest-requires-swagger-plugin\": \"error\",\n \"skapxd/nest-validation-pipe-config\": \"error\",\n },\n },\n // En services, las dependencias entran por el constructor (DI), no con\n // `new`.\n {\n files: [\"src/**/*.service.ts\"],\n name: \"skapxd/nest/services\",\n plugins: { skapxd: pluginReference },\n rules: {\n \"skapxd/nest-no-direct-instantiation\": \"error\",\n },\n },\n // La forma de controllers y gateways la dicta el framework (un método\n // por ruta/evento): ahí el límite de métodos públicos no aporta\n // semántica. Y 2+ query params individuales son un DTO disfrazado.\n {\n files: [\"src/**/*.controller.ts\", \"src/**/*.gateway.ts\"],\n name: \"skapxd/nest/controllers\",\n plugins: { skapxd: pluginReference },\n rules: {\n \"skapxd/max-public-methods\": \"off\",\n \"skapxd/nest-no-inline-query-params\": \"error\",\n },\n },\n // Specs colocados: los tests awaitean helpers y SUTs libremente, y\n // descartar un Result en una aserción no es perder un trace.\n {\n files: [\"**/*.spec.ts\", \"**/*.e2e-spec.ts\"],\n name: \"skapxd/nest/tests\",\n plugins: { skapxd: pluginReference },\n rules: {\n // El `!` sobre un fixture cuya existencia el propio test garantiza\n // no es mentirle al compilador: es el arrange. no-floating-promises\n // sí queda activa — un await olvidado en un spec es un falso verde.\n \"skapxd/await-requires-result\": \"off\",\n \"skapxd/no-non-null-assertion\": \"off\",\n \"skapxd/no-try-catch\": \"off\",\n \"skapxd/result-error-requires-handling\": \"off\",\n },\n },\n ] satisfies OpinionatedConfigList;\n}\n"],"mappings":";;;;;;;AAIO,IAAM,6BAA6B;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AACF;;;ACLO,IAAM,yBAAyB;AAAA;AAAA,EAEpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AACF;;;ACNO,SAAS,kBACd,iBACA;AACA,QAAM,uBAAuB,2BAA2B;AAExD,SAAO;AAAA;AAAA;AAAA;AAAA,IAIL;AAAA,MACE,OAAO,CAAC,aAAa;AAAA,MACrB,iBAAiB;AAAA,MACjB,MAAM;AAAA;AAAA;AAAA,MAGN,SAAS,EAAE,QAAQ,gBAAgB;AAAA,MACnC,OAAO;AAAA,QACL,GAAG;AAAA,QACH,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAQH,6BAA6B;AAAA,UAC3B;AAAA,UACA,EAAE,QAAQ,CAAC,GAAG,sBAAsB,EAAE;AAAA,QACxC;AAAA;AAAA;AAAA,QAGA,gCAAgC;AAAA,UAC9B;AAAA,UACA,EAAE,mBAAmB,CAAC,GAAG,0BAA0B,EAAE;AAAA,QACvD;AAAA;AAAA;AAAA,QAGA,yCAAyC;AAAA;AAAA;AAAA;AAAA,QAIzC,uCAAuC;AAAA;AAAA;AAAA;AAAA,QAIvC,kCAAkC;AAAA,QAClC,yCAAyC;AAAA;AAAA;AAAA;AAAA;AAAA,QAKzC,uCAAuC;AAAA,QACvC,sCAAsC;AAAA,MACxC;AAAA,IACF;AAAA;AAAA;AAAA,IAGA;AAAA,MACE,OAAO,CAAC,qBAAqB;AAAA,MAC7B,MAAM;AAAA,MACN,SAAS,EAAE,QAAQ,gBAAgB;AAAA,MACnC,OAAO;AAAA,QACL,uCAAuC;AAAA,MACzC;AAAA,IACF;AAAA;AAAA;AAAA;AAAA,IAIA;AAAA,MACE,OAAO,CAAC,0BAA0B,qBAAqB;AAAA,MACvD,MAAM;AAAA,MACN,SAAS,EAAE,QAAQ,gBAAgB;AAAA,MACnC,OAAO;AAAA,QACL,6BAA6B;AAAA,QAC7B,sCAAsC;AAAA,MACxC;AAAA,IACF;AAAA;AAAA;AAAA,IAGA;AAAA,MACE,OAAO,CAAC,gBAAgB,kBAAkB;AAAA,MAC1C,MAAM;AAAA,MACN,SAAS,EAAE,QAAQ,gBAAgB;AAAA,MACnC,OAAO;AAAA;AAAA;AAAA;AAAA,QAIL,gCAAgC;AAAA,QAChC,gCAAgC;AAAA,QAChC,uBAAuB;AAAA,QACvB,yCAAyC;AAAA,MAC3C;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
|