@skapxd/eslint-opinionated 0.1.1 → 0.3.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 +13 -20
- package/dist/astro/index.js +2 -2
- package/dist/astro/index.js.map +1 -1
- package/dist/astro/index.mjs +2 -2
- package/dist/{chunk-LJBYVPVK.mjs → chunk-P32EECMV.mjs} +2 -2
- package/dist/{chunk-XGWQ7UQ4.mjs → chunk-SUNOHZFS.mjs} +3 -3
- package/dist/{chunk-XGWQ7UQ4.mjs.map → chunk-SUNOHZFS.mjs.map} +1 -1
- package/dist/{chunk-DITFYRKS.mjs → chunk-TFGBNVXP.mjs} +8 -16
- package/dist/chunk-TFGBNVXP.mjs.map +1 -0
- package/dist/index.js +9 -17
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +4 -4
- package/dist/index.mjs.map +1 -1
- package/dist/next/index.js +3 -3
- package/dist/next/index.js.map +1 -1
- package/dist/next/index.mjs +2 -2
- package/dist/shared/index.d.mts +1 -16
- package/dist/shared/index.d.ts +1 -16
- package/dist/shared/index.js +7 -15
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/index.mjs +1 -1
- package/package.json +1 -1
- package/dist/chunk-DITFYRKS.mjs.map +0 -1
- /package/dist/{chunk-LJBYVPVK.mjs.map → chunk-P32EECMV.mjs.map} +0 -0
package/README.md
CHANGED
|
@@ -309,25 +309,17 @@ import skapxd from "@skapxd/eslint-opinionated";
|
|
|
309
309
|
|
|
310
310
|
export default [
|
|
311
311
|
{
|
|
312
|
-
files: ["src
|
|
312
|
+
files: ["src/**/*.{ts,tsx}"],
|
|
313
313
|
...skapxd.configs.shared.frontend,
|
|
314
314
|
},
|
|
315
|
-
// Capa de servicios: todo await debe ir envuelto en trySafe.
|
|
316
|
-
skapxd.configs.shared.frontendServices,
|
|
317
315
|
];
|
|
318
316
|
```
|
|
319
317
|
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
{
|
|
326
|
-
...skapxd.configs.shared.frontendServices,
|
|
327
|
-
files: ["src/data/**/*.{ts,tsx}"],
|
|
328
|
-
},
|
|
329
|
-
];
|
|
330
|
-
```
|
|
318
|
+
El contrato del front: ninguna función está obligada a retornar `Result`, pero
|
|
319
|
+
toda llamada asíncrona debe ir envuelta en `trySafe` — salvo que lo llamado ya
|
|
320
|
+
retorne `Result`/`Promise<Result<...>>` (exención type-aware de
|
|
321
|
+
`skapxd/await-requires-try-safe`). Aplica el preset a TODO el código del front
|
|
322
|
+
(componentes, hooks, servicios), no solo a los componentes.
|
|
331
323
|
|
|
332
324
|
### Next.js
|
|
333
325
|
|
|
@@ -437,7 +429,7 @@ bloque con `linterOptions: { noInlineConfig: false }` para esos globs.
|
|
|
437
429
|
| `skapxd/one-root-function-per-file` | Un archivo, una función top-level semántica. |
|
|
438
430
|
| `skapxd/async-functions-return-result` | Funciones async de dominio deben retornar `Promise<Result<...>>`. |
|
|
439
431
|
| `skapxd/result-error-requires-cause` | Un `Result.err` derivado debe preservar `cause: result.error`. |
|
|
440
|
-
| `skapxd/await-requires-try-safe` | Los `await` deben estar protegidos por `trySafe`. La activa el preset `shared.
|
|
432
|
+
| `skapxd/await-requires-try-safe` | Los `await` deben estar protegidos por `trySafe`, salvo que lo awaiteado ya retorne `Result`. La activa el preset `shared.frontend`. |
|
|
441
433
|
| `skapxd/no-ad-hoc-ok-result` | Evita contratos `{ ok: ... }` hechos a mano en async exports. |
|
|
442
434
|
| `skapxd/max-hook-size` | Marca hooks grandes o con demasiados `useState`. |
|
|
443
435
|
| `skapxd/jsx-return-name-pascal-case` | Funciones que retornan JSX deben nombrarse como componentes. |
|
|
@@ -517,10 +509,11 @@ el archivo.
|
|
|
517
509
|
|
|
518
510
|
### `skapxd/await-requires-try-safe`
|
|
519
511
|
|
|
520
|
-
>
|
|
521
|
-
>
|
|
522
|
-
>
|
|
523
|
-
>
|
|
512
|
+
> La activa el preset `shared.frontend` en todo el front: componentes, hooks,
|
|
513
|
+
> handlers y servicios. El contrato queda así: ninguna función está obligada
|
|
514
|
+
> a retornar `Result`, pero toda llamada asíncrona debe ir en `trySafe` — salvo
|
|
515
|
+
> que lo llamado ya retorne `Result` (ver exención más abajo). Para activarla
|
|
516
|
+
> en otros globs, añádela tú mismo:
|
|
524
517
|
>
|
|
525
518
|
> ```js
|
|
526
519
|
> rules: {
|
|
@@ -583,7 +576,7 @@ Opción `maxDepth` (por defecto `0`) para permitir hasta N niveles de `../`:
|
|
|
583
576
|
```js
|
|
584
577
|
rules: {
|
|
585
578
|
// permite ../ (un nivel) pero sigue prohibiendo ../../
|
|
586
|
-
"skapxd/no-deep-relative-imports": ["
|
|
579
|
+
"skapxd/no-deep-relative-imports": ["error", { maxDepth: 1 }],
|
|
587
580
|
}
|
|
588
581
|
```
|
|
589
582
|
|
package/dist/astro/index.js
CHANGED
|
@@ -36,8 +36,8 @@ module.exports = __toCommonJS(astro_exports);
|
|
|
36
36
|
|
|
37
37
|
// src/shared/configs/base-rules.ts
|
|
38
38
|
var baseRules = {
|
|
39
|
-
"skapxd/no-ad-hoc-ok-result": "
|
|
40
|
-
"skapxd/no-deep-relative-imports": "
|
|
39
|
+
"skapxd/no-ad-hoc-ok-result": "error",
|
|
40
|
+
"skapxd/no-deep-relative-imports": "error",
|
|
41
41
|
"skapxd/no-promise-chain": "error",
|
|
42
42
|
"skapxd/no-try-catch": "error",
|
|
43
43
|
"skapxd/one-root-function-per-file": "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","export const baseRules = {\n \"skapxd/no-ad-hoc-ok-result\": \"
|
|
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","export const baseRules = {\n \"skapxd/no-ad-hoc-ok-result\": \"error\",\n \"skapxd/no-deep-relative-imports\": \"error\",\n \"skapxd/no-promise-chain\": \"error\",\n \"skapxd/no-try-catch\": \"error\",\n \"skapxd/one-root-function-per-file\": \"error\",\n \"skapxd/prefer-ts-pattern\": \"error\",\n \"skapxd/result-error-requires-cause\": \"error\",\n};\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} from \"#/shared/configs\";\n\nexport function createAstroConfigs(pluginReference: unknown) {\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/result-error-requires-cause\": \"error\",\n },\n },\n ];\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAO,IAAM,YAAY;AAAA,EACvB,8BAA8B;AAAA,EAC9B,mCAAmC;AAAA,EACnC,2BAA2B;AAAA,EAC3B,uBAAuB;AAAA,EACvB,qCAAqC;AAAA,EACrC,4BAA4B;AAAA,EAC5B,sCAAsC;AACxC;;;ACRA,+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;;;ACLO,SAAS,mBAAmB,iBAA0B;AAC3D,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,sCAAsC;AAAA,MACxC;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
|
createBaseLanguageOptions,
|
|
4
4
|
createTypedLanguageOptions
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-TFGBNVXP.mjs";
|
|
6
6
|
|
|
7
7
|
// src/astro/configs.ts
|
|
8
8
|
function createAstroConfigs(pluginReference) {
|
|
@@ -39,4 +39,4 @@ function createAstroConfigs(pluginReference) {
|
|
|
39
39
|
export {
|
|
40
40
|
createAstroConfigs
|
|
41
41
|
};
|
|
42
|
-
//# sourceMappingURL=chunk-
|
|
42
|
+
//# sourceMappingURL=chunk-P32EECMV.mjs.map
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
baseRules,
|
|
3
3
|
createBaseLanguageOptions,
|
|
4
4
|
createTypedLanguageOptions
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-TFGBNVXP.mjs";
|
|
6
6
|
|
|
7
7
|
// src/next/configs.ts
|
|
8
8
|
function createNextConfigs(pluginReference) {
|
|
@@ -49,7 +49,7 @@ function createNextConfigs(pluginReference) {
|
|
|
49
49
|
"skapxd/no-functions-inside-components": "error",
|
|
50
50
|
"skapxd/no-jsx-ternary-null": "error",
|
|
51
51
|
"skapxd/max-hook-size": [
|
|
52
|
-
"
|
|
52
|
+
"error",
|
|
53
53
|
{
|
|
54
54
|
maxLines: 120,
|
|
55
55
|
maxUseState: 1
|
|
@@ -63,4 +63,4 @@ function createNextConfigs(pluginReference) {
|
|
|
63
63
|
export {
|
|
64
64
|
createNextConfigs
|
|
65
65
|
};
|
|
66
|
-
//# sourceMappingURL=chunk-
|
|
66
|
+
//# sourceMappingURL=chunk-SUNOHZFS.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/next/configs.ts"],"sourcesContent":["import {\n baseRules,\n createBaseLanguageOptions,\n createTypedLanguageOptions,\n} from \"#/shared/configs\";\n\nexport function createNextConfigs(pluginReference: unknown) {\n const baseLanguageOptions = createBaseLanguageOptions();\n const typedLanguageOptions = createTypedLanguageOptions();\n\n return [\n {\n languageOptions: baseLanguageOptions,\n name: \"skapxd/next/base\",\n plugins: { skapxd: pluginReference },\n rules: baseRules,\n },\n {\n files: [\"src/app/api/**/*.{ts,tsx}\", \"src/server/**/*.{ts,tsx}\"],\n languageOptions: typedLanguageOptions,\n name: \"skapxd/next/server\",\n plugins: { skapxd: pluginReference },\n rules: {\n ...baseRules,\n \"skapxd/async-functions-return-result\": [\n \"error\",\n {\n allowFilePatterns: [\n \"/(route|page|layout|template|loading|error|not-found)\\\\.tsx?$\",\n ],\n allowNamePatterns: [\n \"^(GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS)$\",\n \"^handle(Get|Post|Put|Patch|Delete|Head|Options)$\",\n \"^start$\",\n ],\n checkMissingReturnType: true,\n resultTypeNames: [\"Result\", \"ResultValue\", \"SafeResult\"],\n },\n ],\n },\n },\n {\n files: [\"**/*.tsx\"],\n languageOptions: baseLanguageOptions,\n name: \"skapxd/next/react\",\n plugins: { skapxd: pluginReference },\n rules: {\n \"skapxd/jsx-return-name-pascal-case\": \"error\",\n \"skapxd/no-functions-inside-components\": \"error\",\n \"skapxd/no-jsx-ternary-null\": \"error\",\n \"skapxd/max-hook-size\": [\n \"
|
|
1
|
+
{"version":3,"sources":["../src/next/configs.ts"],"sourcesContent":["import {\n baseRules,\n createBaseLanguageOptions,\n createTypedLanguageOptions,\n} from \"#/shared/configs\";\n\nexport function createNextConfigs(pluginReference: unknown) {\n const baseLanguageOptions = createBaseLanguageOptions();\n const typedLanguageOptions = createTypedLanguageOptions();\n\n return [\n {\n languageOptions: baseLanguageOptions,\n name: \"skapxd/next/base\",\n plugins: { skapxd: pluginReference },\n rules: baseRules,\n },\n {\n files: [\"src/app/api/**/*.{ts,tsx}\", \"src/server/**/*.{ts,tsx}\"],\n languageOptions: typedLanguageOptions,\n name: \"skapxd/next/server\",\n plugins: { skapxd: pluginReference },\n rules: {\n ...baseRules,\n \"skapxd/async-functions-return-result\": [\n \"error\",\n {\n allowFilePatterns: [\n \"/(route|page|layout|template|loading|error|not-found)\\\\.tsx?$\",\n ],\n allowNamePatterns: [\n \"^(GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS)$\",\n \"^handle(Get|Post|Put|Patch|Delete|Head|Options)$\",\n \"^start$\",\n ],\n checkMissingReturnType: true,\n resultTypeNames: [\"Result\", \"ResultValue\", \"SafeResult\"],\n },\n ],\n },\n },\n {\n files: [\"**/*.tsx\"],\n languageOptions: baseLanguageOptions,\n name: \"skapxd/next/react\",\n plugins: { skapxd: pluginReference },\n rules: {\n \"skapxd/jsx-return-name-pascal-case\": \"error\",\n \"skapxd/no-functions-inside-components\": \"error\",\n \"skapxd/no-jsx-ternary-null\": \"error\",\n \"skapxd/max-hook-size\": [\n \"error\",\n {\n maxLines: 120,\n maxUseState: 1,\n },\n ],\n },\n },\n ];\n}\n"],"mappings":";;;;;;;AAMO,SAAS,kBAAkB,iBAA0B;AAC1D,QAAM,sBAAsB,0BAA0B;AACtD,QAAM,uBAAuB,2BAA2B;AAExD,SAAO;AAAA,IACL;AAAA,MACE,iBAAiB;AAAA,MACjB,MAAM;AAAA,MACN,SAAS,EAAE,QAAQ,gBAAgB;AAAA,MACnC,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,OAAO,CAAC,6BAA6B,0BAA0B;AAAA,MAC/D,iBAAiB;AAAA,MACjB,MAAM;AAAA,MACN,SAAS,EAAE,QAAQ,gBAAgB;AAAA,MACnC,OAAO;AAAA,QACL,GAAG;AAAA,QACH,wCAAwC;AAAA,UACtC;AAAA,UACA;AAAA,YACE,mBAAmB;AAAA,cACjB;AAAA,YACF;AAAA,YACA,mBAAmB;AAAA,cACjB;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,YACA,wBAAwB;AAAA,YACxB,iBAAiB,CAAC,UAAU,eAAe,YAAY;AAAA,UACzD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,OAAO,CAAC,UAAU;AAAA,MAClB,iBAAiB;AAAA,MACjB,MAAM;AAAA,MACN,SAAS,EAAE,QAAQ,gBAAgB;AAAA,MACnC,OAAO;AAAA,QACL,sCAAsC;AAAA,QACtC,yCAAyC;AAAA,QACzC,8BAA8B;AAAA,QAC9B,wBAAwB;AAAA,UACtB;AAAA,UACA;AAAA,YACE,UAAU;AAAA,YACV,aAAa;AAAA,UACf;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
|
|
@@ -13,8 +13,8 @@ function createTypedLanguageOptions() {
|
|
|
13
13
|
|
|
14
14
|
// src/shared/configs/base-rules.ts
|
|
15
15
|
var baseRules = {
|
|
16
|
-
"skapxd/no-ad-hoc-ok-result": "
|
|
17
|
-
"skapxd/no-deep-relative-imports": "
|
|
16
|
+
"skapxd/no-ad-hoc-ok-result": "error",
|
|
17
|
+
"skapxd/no-deep-relative-imports": "error",
|
|
18
18
|
"skapxd/no-promise-chain": "error",
|
|
19
19
|
"skapxd/no-try-catch": "error",
|
|
20
20
|
"skapxd/one-root-function-per-file": "error",
|
|
@@ -62,11 +62,15 @@ function createSharedConfigs(pluginReference) {
|
|
|
62
62
|
plugins: { skapxd: pluginReference },
|
|
63
63
|
rules: {
|
|
64
64
|
...baseRules,
|
|
65
|
+
// En el front no se obliga a retornar Result, pero toda llamada
|
|
66
|
+
// asíncrona debe ir en trySafe — salvo que lo awaiteado ya retorne
|
|
67
|
+
// Result/Promise<Result> (exención type-aware de la regla).
|
|
68
|
+
"skapxd/await-requires-try-safe": "error",
|
|
65
69
|
"skapxd/jsx-return-name-pascal-case": "error",
|
|
66
70
|
"skapxd/no-functions-inside-components": "error",
|
|
67
71
|
"skapxd/no-jsx-ternary-null": "error",
|
|
68
72
|
"skapxd/max-hook-size": [
|
|
69
|
-
"
|
|
73
|
+
"error",
|
|
70
74
|
{
|
|
71
75
|
maxLines: 120,
|
|
72
76
|
maxUseState: 1
|
|
@@ -74,18 +78,6 @@ function createSharedConfigs(pluginReference) {
|
|
|
74
78
|
]
|
|
75
79
|
}
|
|
76
80
|
},
|
|
77
|
-
// Capa de servicios del front (peticiones, clientes de API): todo await
|
|
78
|
-
// debe ir envuelto en trySafe de @skapxd/result. El consumidor puede
|
|
79
|
-
// sobreescribir `files` si sus servicios viven en otra carpeta.
|
|
80
|
-
frontendServices: {
|
|
81
|
-
files: ["**/services/**/*.{ts,tsx}", "**/api/**/*.{ts,tsx}"],
|
|
82
|
-
languageOptions: typedLanguageOptions,
|
|
83
|
-
name: "skapxd/shared/frontend-services",
|
|
84
|
-
plugins: { skapxd: pluginReference },
|
|
85
|
-
rules: {
|
|
86
|
-
"skapxd/await-requires-try-safe": "error"
|
|
87
|
-
}
|
|
88
|
-
},
|
|
89
81
|
package: {
|
|
90
82
|
languageOptions: baseLanguageOptions,
|
|
91
83
|
name: "skapxd/shared/package",
|
|
@@ -112,4 +104,4 @@ export {
|
|
|
112
104
|
createSharedConfigs,
|
|
113
105
|
strictConfig
|
|
114
106
|
};
|
|
115
|
-
//# sourceMappingURL=chunk-
|
|
107
|
+
//# sourceMappingURL=chunk-TFGBNVXP.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/shared/configs/create-typed-language-options.ts","../src/shared/configs/base-rules.ts","../src/shared/configs/create-base-language-options.ts","../src/shared/configs/create-shared-configs.ts","../src/shared/configs/strict-config.ts"],"sourcesContent":["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","export const baseRules = {\n \"skapxd/no-ad-hoc-ok-result\": \"error\",\n \"skapxd/no-deep-relative-imports\": \"error\",\n \"skapxd/no-promise-chain\": \"error\",\n \"skapxd/no-try-catch\": \"error\",\n \"skapxd/one-root-function-per-file\": \"error\",\n \"skapxd/prefer-ts-pattern\": \"error\",\n \"skapxd/result-error-requires-cause\": \"error\",\n};\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 { baseRules } from \"./base-rules\";\nimport { createBaseLanguageOptions } from \"./create-base-language-options\";\nimport { createTypedLanguageOptions } from \"./create-typed-language-options\";\n\nexport function createSharedConfigs(pluginReference: unknown) {\n const baseLanguageOptions = createBaseLanguageOptions();\n const typedLanguageOptions = createTypedLanguageOptions();\n\n return {\n backend: {\n languageOptions: typedLanguageOptions,\n name: \"skapxd/shared/backend\",\n plugins: { skapxd: pluginReference },\n rules: {\n ...baseRules,\n \"skapxd/async-functions-return-result\": [\n \"error\",\n {\n checkMissingReturnType: true,\n resultTypeNames: [\"Result\", \"ResultValue\", \"SafeResult\"],\n },\n ],\n },\n },\n base: {\n languageOptions: baseLanguageOptions,\n name: \"skapxd/shared/base\",\n plugins: { skapxd: pluginReference },\n rules: baseRules,\n },\n frontend: {\n languageOptions: typedLanguageOptions,\n name: \"skapxd/shared/frontend\",\n plugins: { skapxd: pluginReference },\n rules: {\n ...baseRules,\n // En el front no se obliga a retornar Result, pero toda llamada\n // asíncrona debe ir en trySafe — salvo que lo awaiteado ya retorne\n // Result/Promise<Result> (exención type-aware de la regla).\n \"skapxd/await-requires-try-safe\": \"error\",\n \"skapxd/jsx-return-name-pascal-case\": \"error\",\n \"skapxd/no-functions-inside-components\": \"error\",\n \"skapxd/no-jsx-ternary-null\": \"error\",\n \"skapxd/max-hook-size\": [\n \"error\",\n {\n maxLines: 120,\n maxUseState: 1,\n },\n ],\n },\n },\n package: {\n languageOptions: baseLanguageOptions,\n name: \"skapxd/shared/package\",\n plugins: { skapxd: pluginReference },\n rules: {\n \"skapxd/one-root-function-per-file\": \"error\",\n },\n },\n };\n}\n","// Config endurecida: ignora TODOS los comentarios `eslint-disable` (y demás\n// directivas inline) en los archivos que cubre. Así ni una persona ni un agente\n// pueden saltarse una regla con `// eslint-disable-next-line`.\nexport const strictConfig = {\n linterOptions: {\n noInlineConfig: true,\n },\n name: \"skapxd/strict\",\n};\n"],"mappings":";AAAA,OAAO,cAAc;AAEd,SAAS,6BAA6B;AAC3C,SAAO;AAAA;AAAA;AAAA,IAGL,QAAQ,SAAS;AAAA,IACjB,eAAe;AAAA,MACb,gBAAgB;AAAA,IAClB;AAAA,EACF;AACF;;;ACXO,IAAM,YAAY;AAAA,EACvB,8BAA8B;AAAA,EAC9B,mCAAmC;AAAA,EACnC,2BAA2B;AAAA,EAC3B,uBAAuB;AAAA,EACvB,qCAAqC;AAAA,EACrC,4BAA4B;AAAA,EAC5B,sCAAsC;AACxC;;;ACRA,OAAOA,eAAc;AAId,SAAS,4BAA4B;AAC1C,SAAO;AAAA,IACL,QAAQA,UAAS;AAAA,EACnB;AACF;;;ACJO,SAAS,oBAAoB,iBAA0B;AAC5D,QAAM,sBAAsB,0BAA0B;AACtD,QAAM,uBAAuB,2BAA2B;AAExD,SAAO;AAAA,IACL,SAAS;AAAA,MACP,iBAAiB;AAAA,MACjB,MAAM;AAAA,MACN,SAAS,EAAE,QAAQ,gBAAgB;AAAA,MACnC,OAAO;AAAA,QACL,GAAG;AAAA,QACH,wCAAwC;AAAA,UACtC;AAAA,UACA;AAAA,YACE,wBAAwB;AAAA,YACxB,iBAAiB,CAAC,UAAU,eAAe,YAAY;AAAA,UACzD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM;AAAA,MACJ,iBAAiB;AAAA,MACjB,MAAM;AAAA,MACN,SAAS,EAAE,QAAQ,gBAAgB;AAAA,MACnC,OAAO;AAAA,IACT;AAAA,IACA,UAAU;AAAA,MACR,iBAAiB;AAAA,MACjB,MAAM;AAAA,MACN,SAAS,EAAE,QAAQ,gBAAgB;AAAA,MACnC,OAAO;AAAA,QACL,GAAG;AAAA;AAAA;AAAA;AAAA,QAIH,kCAAkC;AAAA,QAClC,sCAAsC;AAAA,QACtC,yCAAyC;AAAA,QACzC,8BAA8B;AAAA,QAC9B,wBAAwB;AAAA,UACtB;AAAA,UACA;AAAA,YACE,UAAU;AAAA,YACV,aAAa;AAAA,UACf;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,SAAS;AAAA,MACP,iBAAiB;AAAA,MACjB,MAAM;AAAA,MACN,SAAS,EAAE,QAAQ,gBAAgB;AAAA,MACnC,OAAO;AAAA,QACL,qCAAqC;AAAA,MACvC;AAAA,IACF;AAAA,EACF;AACF;;;AC1DO,IAAM,eAAe;AAAA,EAC1B,eAAe;AAAA,IACb,gBAAgB;AAAA,EAClB;AAAA,EACA,MAAM;AACR;","names":["tseslint"]}
|
package/dist/index.js
CHANGED
|
@@ -38,8 +38,8 @@ module.exports = __toCommonJS(index_exports);
|
|
|
38
38
|
|
|
39
39
|
// src/shared/configs/base-rules.ts
|
|
40
40
|
var baseRules = {
|
|
41
|
-
"skapxd/no-ad-hoc-ok-result": "
|
|
42
|
-
"skapxd/no-deep-relative-imports": "
|
|
41
|
+
"skapxd/no-ad-hoc-ok-result": "error",
|
|
42
|
+
"skapxd/no-deep-relative-imports": "error",
|
|
43
43
|
"skapxd/no-promise-chain": "error",
|
|
44
44
|
"skapxd/no-try-catch": "error",
|
|
45
45
|
"skapxd/one-root-function-per-file": "error",
|
|
@@ -100,11 +100,15 @@ function createSharedConfigs(pluginReference) {
|
|
|
100
100
|
plugins: { skapxd: pluginReference },
|
|
101
101
|
rules: {
|
|
102
102
|
...baseRules,
|
|
103
|
+
// En el front no se obliga a retornar Result, pero toda llamada
|
|
104
|
+
// asíncrona debe ir en trySafe — salvo que lo awaiteado ya retorne
|
|
105
|
+
// Result/Promise<Result> (exención type-aware de la regla).
|
|
106
|
+
"skapxd/await-requires-try-safe": "error",
|
|
103
107
|
"skapxd/jsx-return-name-pascal-case": "error",
|
|
104
108
|
"skapxd/no-functions-inside-components": "error",
|
|
105
109
|
"skapxd/no-jsx-ternary-null": "error",
|
|
106
110
|
"skapxd/max-hook-size": [
|
|
107
|
-
"
|
|
111
|
+
"error",
|
|
108
112
|
{
|
|
109
113
|
maxLines: 120,
|
|
110
114
|
maxUseState: 1
|
|
@@ -112,18 +116,6 @@ function createSharedConfigs(pluginReference) {
|
|
|
112
116
|
]
|
|
113
117
|
}
|
|
114
118
|
},
|
|
115
|
-
// Capa de servicios del front (peticiones, clientes de API): todo await
|
|
116
|
-
// debe ir envuelto en trySafe de @skapxd/result. El consumidor puede
|
|
117
|
-
// sobreescribir `files` si sus servicios viven en otra carpeta.
|
|
118
|
-
frontendServices: {
|
|
119
|
-
files: ["**/services/**/*.{ts,tsx}", "**/api/**/*.{ts,tsx}"],
|
|
120
|
-
languageOptions: typedLanguageOptions,
|
|
121
|
-
name: "skapxd/shared/frontend-services",
|
|
122
|
-
plugins: { skapxd: pluginReference },
|
|
123
|
-
rules: {
|
|
124
|
-
"skapxd/await-requires-try-safe": "error"
|
|
125
|
-
}
|
|
126
|
-
},
|
|
127
119
|
package: {
|
|
128
120
|
languageOptions: baseLanguageOptions,
|
|
129
121
|
name: "skapxd/shared/package",
|
|
@@ -220,7 +212,7 @@ function createNextConfigs(pluginReference) {
|
|
|
220
212
|
"skapxd/no-functions-inside-components": "error",
|
|
221
213
|
"skapxd/no-jsx-ternary-null": "error",
|
|
222
214
|
"skapxd/max-hook-size": [
|
|
223
|
-
"
|
|
215
|
+
"error",
|
|
224
216
|
{
|
|
225
217
|
maxLines: 120,
|
|
226
218
|
maxUseState: 1
|
|
@@ -1785,7 +1777,7 @@ var plugin = {
|
|
|
1785
1777
|
configs: {},
|
|
1786
1778
|
meta: {
|
|
1787
1779
|
name: "@skapxd/eslint-opinionated",
|
|
1788
|
-
version: "0.
|
|
1780
|
+
version: "0.3.0"
|
|
1789
1781
|
},
|
|
1790
1782
|
rules
|
|
1791
1783
|
};
|