@nitra/eslint-config 3.6.13 → 3.6.14
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/index.js +52 -25
- package/package.json +4 -1
- package/types/index.d.ts +7 -4
package/index.js
CHANGED
|
@@ -54,7 +54,7 @@ const VUE_SCRIPT_ESLINT_RECOMMENDED_GAP_RULES = {
|
|
|
54
54
|
|
|
55
55
|
/** Пресет recommended `@e18e/eslint-plugin` (flat). */
|
|
56
56
|
// @ts-expect-error типізація плагіна не гарантує `configs.recommended`; у runtime поле є.
|
|
57
|
-
const e18eRecommendedFlat = /** @type {import('eslint').Linter.
|
|
57
|
+
const e18eRecommendedFlat = /** @type {import('eslint').Linter.Config} */ (e18ePlugin.configs.recommended)
|
|
58
58
|
|
|
59
59
|
/**
|
|
60
60
|
* Лише віртуальні GraphQL-документи з процесора (gql у `.js`/`.vue`): шляхи виду
|
|
@@ -194,9 +194,9 @@ const vueGraphqlMergedProcessor = mergeProcessors([
|
|
|
194
194
|
|
|
195
195
|
/**
|
|
196
196
|
* Обмежує масив flat-конфігів ESLint заданими `files` (копія кожного елемента).
|
|
197
|
-
* @param {import('eslint').Linter.
|
|
197
|
+
* @param {import('eslint').Linter.Config[]} configs вхідні конфіги
|
|
198
198
|
* @param {string[]} files glob-патерни файлів
|
|
199
|
-
* @returns {import('eslint').Linter.
|
|
199
|
+
* @returns {import('eslint').Linter.Config[]} новий масив flat-конфігів з полем `files`
|
|
200
200
|
*/
|
|
201
201
|
function flatConfigsWithFiles(configs, files) {
|
|
202
202
|
return configs.map(config => ({ ...config, files }))
|
|
@@ -324,21 +324,46 @@ const all = [
|
|
|
324
324
|
/* Друга частина SDL node: лише правила microsoft-sdl; перший блок upstream дублює реєстрацію eslint-plugin-n. */
|
|
325
325
|
const microsoftSdlNodeConfigsWithoutN = microsoftSdl.configs.node.slice(1)
|
|
326
326
|
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
327
|
+
/**
|
|
328
|
+
* Додаткові правила та глобалі Bun поверх пресетів eslint-plugin-n для кожного шару під `params.node`.
|
|
329
|
+
*/
|
|
330
|
+
const NODE_ESLINT_PLUGIN_N_EXTRA = {
|
|
331
|
+
rules: {
|
|
332
|
+
'n/no-missing-import': 'off', // покривається oxlint https://github.com/oxc-project/oxc/issues/481#issuecomment-3135766557
|
|
333
|
+
'n/no-deprecated-api': 'error' // як перший блок `configs.node` у @microsoft/eslint-plugin-sdl
|
|
334
|
+
},
|
|
335
|
+
languageOptions: {
|
|
336
|
+
globals: {
|
|
337
|
+
...globals.node,
|
|
338
|
+
Bun: 'readonly'
|
|
339
339
|
}
|
|
340
340
|
}
|
|
341
|
-
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
/** Три шари: `.js` (рекомендований пресет за `type` у package.json), `.mjs` (ESM), `.cjs` (CommonJS). */
|
|
344
|
+
const NODE_PLUGIN_N_MIXED = nodePlugin.configs['flat/mixed-esm-and-cjs']
|
|
345
|
+
|
|
346
|
+
/**
|
|
347
|
+
* Flat-конфіги eslint-plugin-n для заданих кореневих директорій Node-коду (узгоджено з `flat/mixed-esm-and-cjs`).
|
|
348
|
+
* @param {string[]} dirNames елементи `params.node`
|
|
349
|
+
* @returns {import('eslint').Linter.Config[]} шість flat-конфігів (три від пресету плагіна n × два шари з NODE_ESLINT_PLUGIN_N_EXTRA)
|
|
350
|
+
*/
|
|
351
|
+
function flatConfigsNodePluginNForDirectories(dirNames) {
|
|
352
|
+
const filesByKind = [
|
|
353
|
+
dirNames.map(name => `${name}/**/*.js`),
|
|
354
|
+
dirNames.map(name => `${name}/**/*.mjs`),
|
|
355
|
+
dirNames.map(name => `${name}/**/*.cjs`)
|
|
356
|
+
]
|
|
357
|
+
/** @type {import('eslint').Linter.Config[]} */
|
|
358
|
+
const out = []
|
|
359
|
+
for (let i = 0; i < 3; i++) {
|
|
360
|
+
out.push(
|
|
361
|
+
{ ...NODE_PLUGIN_N_MIXED[i], files: filesByKind[i] },
|
|
362
|
+
{ ...NODE_ESLINT_PLUGIN_N_EXTRA, files: filesByKind[i] }
|
|
363
|
+
)
|
|
364
|
+
}
|
|
365
|
+
return out
|
|
366
|
+
}
|
|
342
367
|
|
|
343
368
|
// Тільки для Vue проектів
|
|
344
369
|
// files: ['**/vite.config.js']
|
|
@@ -505,7 +530,7 @@ const vue2 = [
|
|
|
505
530
|
|
|
506
531
|
/**
|
|
507
532
|
* Увімкнути graphql-eslint processor лише для .js (gql у коді).
|
|
508
|
-
* @param {import('eslint').Linter.
|
|
533
|
+
* @param {import('eslint').Linter.Config[]} result масив конфігів
|
|
509
534
|
* @param {string[]} dirs кореневі директорії
|
|
510
535
|
*/
|
|
511
536
|
function pushGraphqlJsProcessors(result, dirs) {
|
|
@@ -521,7 +546,7 @@ function pushGraphqlJsProcessors(result, dirs) {
|
|
|
521
546
|
/**
|
|
522
547
|
* Merge processor для .vue (vue + vue-blocks + graphql) — має бути останнім серед конфігів для `*.vue`,
|
|
523
548
|
* інакше пресет eslint-plugin-vue (`processor: "vue/vue"`) перезапише його.
|
|
524
|
-
* @param {import('eslint').Linter.
|
|
549
|
+
* @param {import('eslint').Linter.Config[]} result масив конфігів
|
|
525
550
|
* @param {string[]} dirs кореневі директорії Vue-пакетів
|
|
526
551
|
*/
|
|
527
552
|
function pushGraphqlVueMergedProcessorLast(result, dirs) {
|
|
@@ -537,7 +562,7 @@ function pushGraphqlVueMergedProcessorLast(result, dirs) {
|
|
|
537
562
|
/**
|
|
538
563
|
* Після oxlint додає для `.vue` правила з `eslint:recommended`, які не делегує `eslint-plugin-oxlint` і які
|
|
539
564
|
* не ввімкнені в oxlint за `.oxlintrc.json` (див. `VUE_SCRIPT_ESLINT_RECOMMENDED_GAP_RULES`).
|
|
540
|
-
* @param {import('eslint').Linter.
|
|
565
|
+
* @param {import('eslint').Linter.Config[]} result масив конфігів
|
|
541
566
|
* @param {string[]} dirs кореневі директорії Vue-пакетів (ті самі аргументи dirs, що й у pushVueConfigs)
|
|
542
567
|
*/
|
|
543
568
|
function pushVueScriptEslintRecommendedGapsAfterOxlint(result, dirs) {
|
|
@@ -556,9 +581,9 @@ function pushVueScriptEslintRecommendedGapsAfterOxlint(result, dirs) {
|
|
|
556
581
|
|
|
557
582
|
/**
|
|
558
583
|
* Додає до result конфіги для Vue-проєктів (vite, .vue, .js).
|
|
559
|
-
* @param {import('eslint').Linter.
|
|
584
|
+
* @param {import('eslint').Linter.Config[]} result масив конфігів
|
|
560
585
|
* @param {string[]} dirs директорії Vue-проєктів
|
|
561
|
-
* @param {{ includeVite?: boolean, extraVueConfigs?: import('eslint').Linter.
|
|
586
|
+
* @param {{ includeVite?: boolean, extraVueConfigs?: import('eslint').Linter.Config[] }} [options] опції: includeVite, extraVueConfigs
|
|
562
587
|
*/
|
|
563
588
|
function pushVueConfigs(result, dirs, options = {}) {
|
|
564
589
|
const { includeVite = false, extraVueConfigs = [] } = options
|
|
@@ -584,10 +609,12 @@ function pushVueConfigs(result, dirs, options = {}) {
|
|
|
584
609
|
/**
|
|
585
610
|
* ESLint flat config для проєктів на Vue та Node.
|
|
586
611
|
* @param {object} [params] — список директорій для застосування правил
|
|
587
|
-
* @param {string[]} [params.node] — шляхи до Node.js
|
|
612
|
+
* @param {string[]} [params.node] — шляхи до Node.js коду; правила та `globals.node` застосовуються до файлів
|
|
613
|
+
* `.js`, `.mjs` та `.cjs` у дереві кожної директорії (eslint-plugin-n `flat/mixed-esm-and-cjs`: для `.cjs` —
|
|
614
|
+
* script/CommonJS, для `.mjs` — module, для `.js` — за полем `type` у package.json проєкту).
|
|
588
615
|
* @param {string[]} [params.vue] — шляхи до Vue 3
|
|
589
616
|
* @param {string[]} [params.vue2] — шляхи до Vue 2
|
|
590
|
-
* @returns {import('eslint').Linter.
|
|
617
|
+
* @returns {import('eslint').Linter.Config[]} масив конфігурацій ESLint
|
|
591
618
|
*/
|
|
592
619
|
// oxlint-disable-next-line unicorn/no-object-as-default-parameter
|
|
593
620
|
export function getConfig(params = { node: [], vue: [], vue2: [] }) {
|
|
@@ -597,9 +624,9 @@ export function getConfig(params = { node: [], vue: [], vue2: [] }) {
|
|
|
597
624
|
const graphqlVueDirsLast = []
|
|
598
625
|
|
|
599
626
|
if (params.node?.length) {
|
|
600
|
-
const files = params.node.
|
|
627
|
+
const files = params.node.flatMap(name => [`${name}/**/*.js`, `${name}/**/*.mjs`, `${name}/**/*.cjs`])
|
|
601
628
|
result.push(
|
|
602
|
-
...node
|
|
629
|
+
...flatConfigsNodePluginNForDirectories(params.node),
|
|
603
630
|
...flatConfigsWithFiles(microsoftSdlNodeConfigsWithoutN, files)
|
|
604
631
|
)
|
|
605
632
|
// Каталог `npm` пакета конфігу зазвичай без graphql-config; перший preprocess інакше кешує null і ламає демо/vue.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nitra/eslint-config",
|
|
3
|
-
"version": "3.6.
|
|
3
|
+
"version": "3.6.14",
|
|
4
4
|
"description": "An ESLint shareable config for projects using Vue and Node",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"eslint",
|
|
@@ -21,6 +21,9 @@
|
|
|
21
21
|
"type": "module",
|
|
22
22
|
"types": "./types/index.d.ts",
|
|
23
23
|
"exports": "./index.js",
|
|
24
|
+
"scripts": {
|
|
25
|
+
"test": "bun test"
|
|
26
|
+
},
|
|
24
27
|
"dependencies": {
|
|
25
28
|
"@e18e/eslint-plugin": "^0.3.0",
|
|
26
29
|
"@eslint/compat": "^2.0.5",
|
package/types/index.d.ts
CHANGED
|
@@ -2,7 +2,10 @@
|
|
|
2
2
|
* Параметри для getConfig — список директорій для застосування правил.
|
|
3
3
|
*/
|
|
4
4
|
export interface GetConfigParams {
|
|
5
|
-
/**
|
|
5
|
+
/**
|
|
6
|
+
* Шляхи до Node.js коду — правила та node globals для `**/*.js`, `**/*.mjs`, `**/*.cjs` у кожній директорії
|
|
7
|
+
* (у т.ч. окремий пресет для `.cjs` через eslint-plugin-n mixed ESM/CJS).
|
|
8
|
+
*/
|
|
6
9
|
node?: string[]
|
|
7
10
|
/** Шляхи до Vue 3 */
|
|
8
11
|
vue?: string[]
|
|
@@ -11,14 +14,14 @@ export interface GetConfigParams {
|
|
|
11
14
|
}
|
|
12
15
|
|
|
13
16
|
/**
|
|
14
|
-
* Один елемент
|
|
17
|
+
* Один елемент flat config ESLint (те саме, що `Linter.Config`; колишня назва типу `FlatConfig` у ESLint застаріла).
|
|
15
18
|
* У проєктах з встановленим eslint типи будуть зв’язані автоматично.
|
|
16
19
|
*/
|
|
17
|
-
export type FlatConfig =
|
|
20
|
+
export type FlatConfig = import('eslint').Linter.Config
|
|
18
21
|
|
|
19
22
|
/**
|
|
20
23
|
* ESLint flat config для проєктів на Vue та Node.
|
|
21
24
|
* @param params — список директорій для застосування правил
|
|
22
25
|
* @returns масив конфігурацій ESLint (flat config)
|
|
23
26
|
*/
|
|
24
|
-
export function getConfig(params?: GetConfigParams):
|
|
27
|
+
export function getConfig(params?: GetConfigParams): import('eslint').Linter.Config[]
|