eslint-plugin-weld 0.0.4-rc.2 → 0.2.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 +66 -12
- package/dist/index.d.ts +7 -33
- package/dist/index.js +873 -5
- package/dist/index.js.map +1 -1
- package/package.json +14 -1
package/README.md
CHANGED
|
@@ -2,22 +2,33 @@
|
|
|
2
2
|
|
|
3
3
|
Подход к организации кода во frontend-приложениях и инструменты для его соблюдения.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Ключевые идеи подхода
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
так, чтобы эти границы держались со временем. Ключевая идея — строгая инкапсуляция: модуль публикует
|
|
9
|
-
наружу узкий, осознанно спроектированный интерфейс, а всё остальное остаётся его внутренним делом.
|
|
10
|
-
Слои задают направление зависимостей, инкапсуляция не даёт им расползтись.
|
|
7
|
+
### 1. Баррель = граница модуля
|
|
11
8
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
9
|
+
Папка с `index.ts` — модуль с публичным интерфейсом: что в барреле — публично, остальное недоступно
|
|
10
|
+
снаружи.
|
|
11
|
+
|
|
12
|
+
Префикс `_` и папка `internal/` прячут содержимое даже там, где барреля нет.
|
|
13
|
+
|
|
14
|
+
### 2. Однонаправленность зависимостей
|
|
15
|
+
|
|
16
|
+
Слой не импортирует ничего из слоев выше.
|
|
17
|
+
|
|
18
|
+
### 3. Слои задает проект
|
|
19
|
+
|
|
20
|
+
Список и порядок слоёв задаёт проект.
|
|
21
|
+
|
|
22
|
+
### 4. Общие слои и фрактальность модулей
|
|
23
|
+
|
|
24
|
+
Общие слои наверху, модули в `modules/` — со слоями или без, с вложенными модулями в собственной
|
|
25
|
+
`modules/`. Правила одинаковы на любой глубине.
|
|
15
26
|
|
|
16
27
|
## Статус
|
|
17
28
|
|
|
18
|
-
Ранняя стадия. Документация пишется; ESLint
|
|
19
|
-
|
|
20
|
-
обратной совместимости.
|
|
29
|
+
Ранняя стадия. Документация подхода пишется; в ESLint-плагине реализовано первое правило —
|
|
30
|
+
[`weld/no-barrel-bypass`](docs/rules/no-barrel-bypass.md). Правила и их именование могут меняться
|
|
31
|
+
без обратной совместимости.
|
|
21
32
|
|
|
22
33
|
## ESLint-плагин
|
|
23
34
|
|
|
@@ -35,6 +46,14 @@ import weld from 'eslint-plugin-weld';
|
|
|
35
46
|
export default [weld.configs.recommended];
|
|
36
47
|
```
|
|
37
48
|
|
|
49
|
+
Плагин предоставляет готовые наборы правил `recommended` и `strict`:
|
|
50
|
+
|
|
51
|
+
```js
|
|
52
|
+
import weld from 'eslint-plugin-weld';
|
|
53
|
+
|
|
54
|
+
export default [weld.configs.strict];
|
|
55
|
+
```
|
|
56
|
+
|
|
38
57
|
Можно подключить и сам плагин, включая правила поштучно:
|
|
39
58
|
|
|
40
59
|
```js
|
|
@@ -44,12 +63,47 @@ export default [
|
|
|
44
63
|
{
|
|
45
64
|
plugins: { weld },
|
|
46
65
|
rules: {
|
|
47
|
-
|
|
66
|
+
'weld/no-barrel-bypass': 'error',
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
];
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Правила
|
|
73
|
+
|
|
74
|
+
- [`weld/no-barrel-bypass`](docs/rules/no-barrel-bypass.md) — запрещает импорты, которые входят
|
|
75
|
+
внутрь модуля мимо его точки входа (`index.*`), минуя баррель.
|
|
76
|
+
|
|
77
|
+
Правило учитывает алиасы путей и корень репозитория. Если алиасы не заданы в конфиге, они
|
|
78
|
+
автоматически подхватываются из `compilerOptions.paths` ближайшего `tsconfig.json` (с резолвом
|
|
79
|
+
`extends`); задать их явно можно через `settings.weld`:
|
|
80
|
+
|
|
81
|
+
```js
|
|
82
|
+
export default [
|
|
83
|
+
{
|
|
84
|
+
settings: {
|
|
85
|
+
weld: {
|
|
86
|
+
repoRoot: '.', // необязательно; по умолчанию — авто-поиск
|
|
87
|
+
aliasesBaseUrl: 'packages/app', // необязательно; по умолчанию '.'
|
|
88
|
+
aliases: { '@/*': ['src/*'] },
|
|
89
|
+
},
|
|
48
90
|
},
|
|
49
91
|
},
|
|
50
92
|
];
|
|
51
93
|
```
|
|
52
94
|
|
|
95
|
+
Формат и разбор этих настроек описаны в [документации настроек](docs/settings.md); подробности
|
|
96
|
+
самого правила — в [документации правила](docs/rules/no-barrel-bypass.md).
|
|
97
|
+
|
|
98
|
+
### Отладка
|
|
99
|
+
|
|
100
|
+
Плагин использует пакет [`debug`](https://www.npmjs.com/package/debug) под namespace
|
|
101
|
+
`eslint-plugin-weld:*`:
|
|
102
|
+
|
|
103
|
+
```sh
|
|
104
|
+
DEBUG=eslint-plugin-weld:* npx eslint .
|
|
105
|
+
```
|
|
106
|
+
|
|
53
107
|
## Разработка
|
|
54
108
|
|
|
55
109
|
Нужен Node 20.19+ и Yarn 4 (через corepack: `corepack enable`).
|
package/dist/index.d.ts
CHANGED
|
@@ -1,44 +1,18 @@
|
|
|
1
|
+
import * as node_modules__eslint_core_dist_cjs_types_cjs from 'node_modules/@eslint/core/dist/cjs/types.cjs';
|
|
2
|
+
import * as eslint from 'eslint';
|
|
1
3
|
import { Linter } from 'eslint';
|
|
2
4
|
|
|
3
|
-
/**
|
|
4
|
-
* @fileoverview Shared types for ESLint Core.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* The human readable severity level used in a configuration.
|
|
9
|
-
*/
|
|
10
|
-
type SeverityName = "off" | "warn" | "error";
|
|
11
|
-
/**
|
|
12
|
-
* The numeric severity level for a rule.
|
|
13
|
-
*
|
|
14
|
-
* - `0` means off.
|
|
15
|
-
* - `1` means warn.
|
|
16
|
-
* - `2` means error.
|
|
17
|
-
*/
|
|
18
|
-
type SeverityLevel = 0 | 1 | 2;
|
|
19
|
-
/**
|
|
20
|
-
* The severity of a rule in a configuration.
|
|
21
|
-
*/
|
|
22
|
-
type Severity = SeverityName | SeverityLevel;
|
|
23
|
-
/**
|
|
24
|
-
* The configuration for a rule.
|
|
25
|
-
*/
|
|
26
|
-
type RuleConfig<RuleOptions extends unknown[] = unknown[]> = Severity | [Severity, ...Partial<RuleOptions>];
|
|
27
|
-
/**
|
|
28
|
-
* A collection of rules and their configurations.
|
|
29
|
-
*/
|
|
30
|
-
interface RulesConfig {
|
|
31
|
-
[key: string]: RuleConfig;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
5
|
declare const plugin: {
|
|
35
6
|
meta: {
|
|
36
7
|
name: string;
|
|
37
8
|
version: string;
|
|
38
9
|
};
|
|
39
|
-
rules: {
|
|
10
|
+
rules: {
|
|
11
|
+
'no-barrel-bypass': eslint.Rule.RuleModule;
|
|
12
|
+
};
|
|
40
13
|
configs: {
|
|
41
|
-
recommended: Linter.Config<RulesConfig>;
|
|
14
|
+
recommended: Linter.Config<node_modules__eslint_core_dist_cjs_types_cjs.RulesConfig>;
|
|
15
|
+
strict: Linter.Config<node_modules__eslint_core_dist_cjs_types_cjs.RulesConfig>;
|
|
42
16
|
};
|
|
43
17
|
};
|
|
44
18
|
|