@nitra/eslint-config 3.6.12 → 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 -24
- 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,20 +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
|
-
|
|
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'
|
|
338
339
|
}
|
|
339
340
|
}
|
|
340
|
-
|
|
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
|
+
}
|
|
341
367
|
|
|
342
368
|
// Тільки для Vue проектів
|
|
343
369
|
// files: ['**/vite.config.js']
|
|
@@ -504,7 +530,7 @@ const vue2 = [
|
|
|
504
530
|
|
|
505
531
|
/**
|
|
506
532
|
* Увімкнути graphql-eslint processor лише для .js (gql у коді).
|
|
507
|
-
* @param {import('eslint').Linter.
|
|
533
|
+
* @param {import('eslint').Linter.Config[]} result масив конфігів
|
|
508
534
|
* @param {string[]} dirs кореневі директорії
|
|
509
535
|
*/
|
|
510
536
|
function pushGraphqlJsProcessors(result, dirs) {
|
|
@@ -520,7 +546,7 @@ function pushGraphqlJsProcessors(result, dirs) {
|
|
|
520
546
|
/**
|
|
521
547
|
* Merge processor для .vue (vue + vue-blocks + graphql) — має бути останнім серед конфігів для `*.vue`,
|
|
522
548
|
* інакше пресет eslint-plugin-vue (`processor: "vue/vue"`) перезапише його.
|
|
523
|
-
* @param {import('eslint').Linter.
|
|
549
|
+
* @param {import('eslint').Linter.Config[]} result масив конфігів
|
|
524
550
|
* @param {string[]} dirs кореневі директорії Vue-пакетів
|
|
525
551
|
*/
|
|
526
552
|
function pushGraphqlVueMergedProcessorLast(result, dirs) {
|
|
@@ -536,7 +562,7 @@ function pushGraphqlVueMergedProcessorLast(result, dirs) {
|
|
|
536
562
|
/**
|
|
537
563
|
* Після oxlint додає для `.vue` правила з `eslint:recommended`, які не делегує `eslint-plugin-oxlint` і які
|
|
538
564
|
* не ввімкнені в oxlint за `.oxlintrc.json` (див. `VUE_SCRIPT_ESLINT_RECOMMENDED_GAP_RULES`).
|
|
539
|
-
* @param {import('eslint').Linter.
|
|
565
|
+
* @param {import('eslint').Linter.Config[]} result масив конфігів
|
|
540
566
|
* @param {string[]} dirs кореневі директорії Vue-пакетів (ті самі аргументи dirs, що й у pushVueConfigs)
|
|
541
567
|
*/
|
|
542
568
|
function pushVueScriptEslintRecommendedGapsAfterOxlint(result, dirs) {
|
|
@@ -555,9 +581,9 @@ function pushVueScriptEslintRecommendedGapsAfterOxlint(result, dirs) {
|
|
|
555
581
|
|
|
556
582
|
/**
|
|
557
583
|
* Додає до result конфіги для Vue-проєктів (vite, .vue, .js).
|
|
558
|
-
* @param {import('eslint').Linter.
|
|
584
|
+
* @param {import('eslint').Linter.Config[]} result масив конфігів
|
|
559
585
|
* @param {string[]} dirs директорії Vue-проєктів
|
|
560
|
-
* @param {{ includeVite?: boolean, extraVueConfigs?: import('eslint').Linter.
|
|
586
|
+
* @param {{ includeVite?: boolean, extraVueConfigs?: import('eslint').Linter.Config[] }} [options] опції: includeVite, extraVueConfigs
|
|
561
587
|
*/
|
|
562
588
|
function pushVueConfigs(result, dirs, options = {}) {
|
|
563
589
|
const { includeVite = false, extraVueConfigs = [] } = options
|
|
@@ -583,10 +609,12 @@ function pushVueConfigs(result, dirs, options = {}) {
|
|
|
583
609
|
/**
|
|
584
610
|
* ESLint flat config для проєктів на Vue та Node.
|
|
585
611
|
* @param {object} [params] — список директорій для застосування правил
|
|
586
|
-
* @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 проєкту).
|
|
587
615
|
* @param {string[]} [params.vue] — шляхи до Vue 3
|
|
588
616
|
* @param {string[]} [params.vue2] — шляхи до Vue 2
|
|
589
|
-
* @returns {import('eslint').Linter.
|
|
617
|
+
* @returns {import('eslint').Linter.Config[]} масив конфігурацій ESLint
|
|
590
618
|
*/
|
|
591
619
|
// oxlint-disable-next-line unicorn/no-object-as-default-parameter
|
|
592
620
|
export function getConfig(params = { node: [], vue: [], vue2: [] }) {
|
|
@@ -596,9 +624,9 @@ export function getConfig(params = { node: [], vue: [], vue2: [] }) {
|
|
|
596
624
|
const graphqlVueDirsLast = []
|
|
597
625
|
|
|
598
626
|
if (params.node?.length) {
|
|
599
|
-
const files = params.node.
|
|
627
|
+
const files = params.node.flatMap(name => [`${name}/**/*.js`, `${name}/**/*.mjs`, `${name}/**/*.cjs`])
|
|
600
628
|
result.push(
|
|
601
|
-
...node
|
|
629
|
+
...flatConfigsNodePluginNForDirectories(params.node),
|
|
602
630
|
...flatConfigsWithFiles(microsoftSdlNodeConfigsWithoutN, files)
|
|
603
631
|
)
|
|
604
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[]
|