@enormora/eslint-config-typescript 0.0.35 → 0.0.37

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/package.json CHANGED
@@ -4,24 +4,28 @@
4
4
  "Christian Rackerseder <github@echooff.de>"
5
5
  ],
6
6
  "dependencies": {
7
- "@typescript-eslint/eslint-plugin": "8.58.1",
8
- "@typescript-eslint/parser": "8.58.1",
7
+ "@typescript-eslint/eslint-plugin": "8.59.3",
8
+ "@typescript-eslint/parser": "8.59.3",
9
9
  "eslint-import-resolver-typescript": "4.4.4",
10
10
  "eslint-plugin-functional": "9.0.4",
11
11
  "eslint-plugin-import-x": "4.16.2",
12
- "eslint-plugin-perfectionist": "5.8.0"
12
+ "eslint-plugin-perfectionist": "5.9.0"
13
13
  },
14
14
  "description": "Enormora’s ESLint typescript configuration",
15
+ "exports": {
16
+ ".": {
17
+ "import": "./presets/typescript/typescript.js"
18
+ }
19
+ },
15
20
  "license": "MIT",
16
- "main": "typescript.js",
17
21
  "name": "@enormora/eslint-config-typescript",
18
22
  "peerDependencies": {
19
- "@enormora/eslint-config-base": "0.0.30"
23
+ "@enormora/eslint-config-base": "0.0.32"
20
24
  },
21
25
  "repository": {
22
26
  "type": "git",
23
27
  "url": "git://github.com/enormora/eslint-config.git"
24
28
  },
25
29
  "type": "module",
26
- "version": "0.0.35"
30
+ "version": "0.0.37"
27
31
  }
@@ -1,28 +1,62 @@
1
- import typescriptParser from '@typescript-eslint/parser';
2
1
  import typescriptPlugin from '@typescript-eslint/eslint-plugin';
3
- import functionalPlugin from 'eslint-plugin-functional';
4
- import perfectionistPlugin from 'eslint-plugin-perfectionist';
2
+ import typescriptParser from '@typescript-eslint/parser';
5
3
  import { createTypeScriptImportResolver } from 'eslint-import-resolver-typescript';
4
+ import functionalPlugin from 'eslint-plugin-functional';
6
5
  import { createNodeResolver } from 'eslint-plugin-import-x';
7
- import { baseConfig } from '@enormora/eslint-config-base/base.js';
6
+ import perfectionistPlugin from 'eslint-plugin-perfectionist';
8
7
  import { javascriptExtensions, typescriptExtensions } from '@enormora/eslint-config-base/constants.js';
8
+ import { createRestrictedSyntaxPlugin } from '@enormora/eslint-config-base/rule-sets/restricted-syntax.js';
9
+ import { baseSharedConfig } from '@enormora/eslint-config-base/presets/base/base-shared.js';
10
+
11
+ export const noTsEnumDeclarationRestriction = {
12
+ selector: 'TSEnumDeclaration',
13
+ message: 'Use a string union type instead'
14
+ };
15
+
16
+ const functionLikeNodes = [
17
+ 'FunctionDeclaration',
18
+ 'FunctionExpression',
19
+ 'ArrowFunctionExpression',
20
+ 'TSFunctionType',
21
+ 'TSMethodSignature',
22
+ 'TSDeclareFunction',
23
+ 'TSConstructorType'
24
+ ]
25
+ .join(', ');
26
+
27
+ const noInlineSignatureTypeLiteralSelector = [
28
+ `:matches(${functionLikeNodes}) > .params TSTypeAnnotation > TSTypeLiteral`,
29
+ `:matches(${functionLikeNodes}) > TSTypeAnnotation.returnType > TSTypeLiteral`
30
+ ]
31
+ .join(', ');
32
+
33
+ export const noInlineSignatureTypeLiteralRestriction = {
34
+ selector: noInlineSignatureTypeLiteralSelector,
35
+ message:
36
+ 'Inline object type literals are not allowed in function parameters or return types — extract a named type.'
37
+ };
38
+
39
+ const restrictedSyntaxTypescriptPlugin = createRestrictedSyntaxPlugin([
40
+ 'no-ts-enum-declaration',
41
+ 'no-inline-signature-type-literal'
42
+ ]);
9
43
 
10
44
  function asArray(value) {
11
45
  if (Array.isArray(value)) {
12
46
  return value;
13
47
  }
14
48
 
15
- return [value];
49
+ return [ value ];
16
50
  }
17
51
 
18
52
  function configureWrappedCoreRule(name, optionsOverrides) {
19
- const coreRuleConfig = asArray(baseConfig.rules[name]);
20
- const [coreRuleSeverity, ...coreRuleOptions] = coreRuleConfig;
53
+ const coreRuleConfig = asArray(baseSharedConfig.rules[name]);
54
+ const [ coreRuleSeverity, ...coreRuleOptions ] = coreRuleConfig;
21
55
  const options = optionsOverrides === undefined ? coreRuleOptions : asArray(optionsOverrides);
22
56
 
23
57
  return {
24
58
  [name]: 'off',
25
- [`@typescript-eslint/${name}`]: [coreRuleSeverity, ...options]
59
+ [`@typescript-eslint/${name}`]: [ coreRuleSeverity, ...options ]
26
60
  };
27
61
  }
28
62
 
@@ -45,7 +79,7 @@ export const typescriptConfig = {
45
79
  },
46
80
  'import-x/resolver-next': [
47
81
  createNodeResolver({
48
- extensions: [...javascriptExtensions, ...typescriptExtensions]
82
+ extensions: [ ...javascriptExtensions, ...typescriptExtensions ]
49
83
  }),
50
84
  createTypeScriptImportResolver()
51
85
  ]
@@ -53,9 +87,16 @@ export const typescriptConfig = {
53
87
  plugins: {
54
88
  '@typescript-eslint': typescriptPlugin,
55
89
  perfectionist: perfectionistPlugin,
56
- functional: functionalPlugin
90
+ functional: functionalPlugin,
91
+ 'restricted-syntax-typescript': restrictedSyntaxTypescriptPlugin
57
92
  },
58
93
  rules: {
94
+ 'restricted-syntax-typescript/no-ts-enum-declaration': [ 'error', noTsEnumDeclarationRestriction ],
95
+ 'restricted-syntax-typescript/no-inline-signature-type-literal': [
96
+ 'error',
97
+ noInlineSignatureTypeLiteralRestriction
98
+ ],
99
+
59
100
  '@typescript-eslint/no-require-imports': 'error',
60
101
  '@typescript-eslint/adjacent-overload-signatures': 'error',
61
102
  '@typescript-eslint/array-type': [
@@ -65,7 +106,7 @@ export const typescriptConfig = {
65
106
  }
66
107
  ],
67
108
  '@typescript-eslint/await-thenable': 'error',
68
- '@typescript-eslint/no-empty-object-type': ['error', { allowInterfaces: 'never', allowObjectTypes: 'never' }],
109
+ '@typescript-eslint/no-empty-object-type': [ 'error', { allowInterfaces: 'never', allowObjectTypes: 'never' } ],
69
110
  '@typescript-eslint/no-unsafe-function-type': 'error',
70
111
  '@typescript-eslint/no-wrapper-object-types': 'error',
71
112
  '@typescript-eslint/no-restricted-types': [
@@ -93,17 +134,17 @@ export const typescriptConfig = {
93
134
  'error',
94
135
  {
95
136
  selector: 'parameter',
96
- format: ['camelCase'],
137
+ format: [ 'camelCase' ],
97
138
  leadingUnderscore: 'allow',
98
139
  trailingUnderscore: 'forbid'
99
140
  },
100
141
  {
101
142
  selector: 'typeLike',
102
- format: ['PascalCase']
143
+ format: [ 'PascalCase' ]
103
144
  },
104
145
  {
105
146
  selector: 'interface',
106
- format: ['PascalCase'],
147
+ format: [ 'PascalCase' ],
107
148
  custom: {
108
149
  regex: '^I[A-Z]',
109
150
  match: false
@@ -197,23 +238,23 @@ export const typescriptConfig = {
197
238
  '@typescript-eslint/strict-void-return': 'error',
198
239
  '@typescript-eslint/only-throw-error': 'error',
199
240
  '@typescript-eslint/prefer-optional-chain': 'error',
200
- '@typescript-eslint/prefer-nullish-coalescing': ['error', { ignoreIfStatements: true }],
201
- '@typescript-eslint/class-literal-property-style': ['error', 'fields'],
202
- '@typescript-eslint/consistent-type-definitions': ['error', 'type'],
241
+ '@typescript-eslint/prefer-nullish-coalescing': [ 'error', { ignoreIfStatements: true } ],
242
+ '@typescript-eslint/class-literal-property-style': [ 'error', 'fields' ],
243
+ '@typescript-eslint/consistent-type-definitions': [ 'error', 'type' ],
203
244
  ...configureWrappedCoreRule('default-param-last'),
204
245
  ...configureWrappedCoreRule('dot-notation'),
205
246
  '@typescript-eslint/explicit-member-accessibility': 'off',
206
247
  '@typescript-eslint/explicit-module-boundary-types': 'off',
207
248
  '@typescript-eslint/init-declarations': 'off',
208
- '@typescript-eslint/method-signature-style': ['error', 'property'],
249
+ '@typescript-eslint/method-signature-style': [ 'error', 'property' ],
209
250
  '@typescript-eslint/no-base-to-string': 'error',
210
251
  ...configureWrappedCoreRule('no-dupe-class-members'),
211
- '@typescript-eslint/no-dynamic-delete': ['error'],
212
- '@typescript-eslint/no-extra-non-null-assertion': ['error'],
213
- '@typescript-eslint/no-floating-promises': ['error'],
214
- '@typescript-eslint/no-implied-eval': ['error'],
215
- '@typescript-eslint/no-invalid-this': ['error'],
216
- '@typescript-eslint/no-invalid-void-type': ['error'],
252
+ '@typescript-eslint/no-dynamic-delete': [ 'error' ],
253
+ '@typescript-eslint/no-extra-non-null-assertion': [ 'error' ],
254
+ '@typescript-eslint/no-floating-promises': [ 'error' ],
255
+ '@typescript-eslint/no-implied-eval': [ 'error' ],
256
+ '@typescript-eslint/no-invalid-this': [ 'error' ],
257
+ '@typescript-eslint/no-invalid-void-type': [ 'error' ],
217
258
  ...configureWrappedCoreRule('no-magic-numbers', {
218
259
  ignoreEnums: false,
219
260
  ignoreNumericLiteralTypes: true,
@@ -224,22 +265,22 @@ export const typescriptConfig = {
224
265
  detectObjects: false,
225
266
  enforceConst: false,
226
267
  ignoreClassFieldInitialValues: false,
227
- ignore: [-1, 0, 1]
268
+ ignore: [ -1, 0, 1 ]
228
269
  }),
229
- '@typescript-eslint/no-namespace': ['error'],
230
- '@typescript-eslint/no-non-null-asserted-optional-chain': ['error'],
231
- '@typescript-eslint/no-non-null-assertion': ['error'],
232
- '@typescript-eslint/no-unnecessary-boolean-literal-compare': ['error'],
233
- '@typescript-eslint/no-unnecessary-condition': ['error'],
234
- '@typescript-eslint/no-unsafe-assignment': ['error'],
235
- '@typescript-eslint/no-unsafe-call': ['error'],
236
- '@typescript-eslint/no-unsafe-member-access': ['error'],
237
- '@typescript-eslint/no-unsafe-return': ['error'],
270
+ '@typescript-eslint/no-namespace': [ 'error' ],
271
+ '@typescript-eslint/no-non-null-asserted-optional-chain': [ 'error' ],
272
+ '@typescript-eslint/no-non-null-assertion': [ 'error' ],
273
+ '@typescript-eslint/no-unnecessary-boolean-literal-compare': [ 'error' ],
274
+ '@typescript-eslint/no-unnecessary-condition': [ 'error' ],
275
+ '@typescript-eslint/no-unsafe-assignment': [ 'error' ],
276
+ '@typescript-eslint/no-unsafe-call': [ 'error' ],
277
+ '@typescript-eslint/no-unsafe-member-access': [ 'error' ],
278
+ '@typescript-eslint/no-unsafe-return': [ 'error' ],
238
279
  ...configureWrappedCoreRule('no-use-before-define'),
239
- '@typescript-eslint/prefer-as-const': ['error'],
280
+ '@typescript-eslint/prefer-as-const': [ 'error' ],
240
281
  // disabled because we use functional/prefer-immutable-types.md
241
- '@typescript-eslint/prefer-readonly-parameter-types': ['off'],
242
- '@typescript-eslint/prefer-reduce-type-parameter': ['error'],
282
+ '@typescript-eslint/prefer-readonly-parameter-types': [ 'off' ],
283
+ '@typescript-eslint/prefer-reduce-type-parameter': [ 'error' ],
243
284
  '@typescript-eslint/ban-ts-comment': [
244
285
  'error',
245
286
  {
@@ -250,21 +291,21 @@ export const typescriptConfig = {
250
291
  minimumDescriptionLength: 10
251
292
  }
252
293
  ],
253
- '@typescript-eslint/restrict-template-expressions': ['off'],
254
- '@typescript-eslint/return-await': ['off'],
255
- '@typescript-eslint/switch-exhaustiveness-check': ['error'],
256
- '@typescript-eslint/unbound-method': ['off'],
257
- '@typescript-eslint/ban-tslint-comment': ['off'],
258
- '@typescript-eslint/no-confusing-non-null-assertion': ['error'],
259
- '@typescript-eslint/prefer-enum-initializers': ['off'],
260
- '@typescript-eslint/prefer-literal-enum-member': ['off'],
294
+ '@typescript-eslint/restrict-template-expressions': [ 'off' ],
295
+ '@typescript-eslint/return-await': [ 'off' ],
296
+ '@typescript-eslint/switch-exhaustiveness-check': [ 'error' ],
297
+ '@typescript-eslint/unbound-method': [ 'off' ],
298
+ '@typescript-eslint/ban-tslint-comment': [ 'off' ],
299
+ '@typescript-eslint/no-confusing-non-null-assertion': [ 'error' ],
300
+ '@typescript-eslint/prefer-enum-initializers': [ 'off' ],
301
+ '@typescript-eslint/prefer-literal-enum-member': [ 'off' ],
261
302
  ...configureWrappedCoreRule('no-redeclare'),
262
303
  ...configureWrappedCoreRule('no-shadow'),
263
304
  '@typescript-eslint/consistent-type-imports': [
264
305
  'error',
265
306
  { prefer: 'type-imports', fixStyle: 'inline-type-imports', disallowTypeAnnotations: true }
266
307
  ],
267
- '@typescript-eslint/consistent-indexed-object-style': ['error', 'record'],
308
+ '@typescript-eslint/consistent-indexed-object-style': [ 'error', 'record' ],
268
309
  '@typescript-eslint/no-loop-func': 'off',
269
310
  '@typescript-eslint/no-unnecessary-type-constraint': 'error',
270
311
  '@typescript-eslint/no-confusing-void-expression': [
@@ -283,7 +324,7 @@ export const typescriptConfig = {
283
324
  '@typescript-eslint/consistent-type-exports': 'error',
284
325
  '@typescript-eslint/no-redundant-type-constituents': 'error',
285
326
  '@typescript-eslint/no-useless-empty-export': 'error',
286
- '@typescript-eslint/consistent-generic-constructors': ['error', 'constructor'],
327
+ '@typescript-eslint/consistent-generic-constructors': [ 'error', 'constructor' ],
287
328
  '@typescript-eslint/no-duplicate-enum-values': 'error',
288
329
  '@typescript-eslint/parameter-properties': 'off',
289
330
  '@typescript-eslint/no-unsafe-declaration-merging': 'error',
@@ -331,12 +372,12 @@ export const typescriptConfig = {
331
372
  replace: 'readonly $1'
332
373
  },
333
374
  {
334
- pattern: '^(Array|Map|Set)<(.+)>$',
335
- replace: 'Readonly$1<$2>'
375
+ pattern: '^(\\[.+\\])$',
376
+ replace: 'readonly $1'
336
377
  },
337
378
  {
338
- pattern: '^(.+)$',
339
- replace: 'Readonly<$1>'
379
+ pattern: '^(Map|Set)<(.+)>$',
380
+ replace: 'Readonly$1<$2>'
340
381
  }
341
382
  ]
342
383
  },
@@ -344,16 +385,15 @@ export const typescriptConfig = {
344
385
  enforcement: 'ReadonlyShallow'
345
386
  },
346
387
  returnTypes: {
347
- enforcement: 'ReadonlyShallow'
388
+ enforcement: 'None'
348
389
  },
349
390
  variables: {
350
- enforcement: 'ReadonlyShallow',
351
- ignoreInFunctions: true
391
+ enforcement: 'None'
352
392
  }
353
393
  }
354
394
  ],
355
395
  'functional/prefer-tacit': 'error',
356
- 'functional/readonly-type': ['error', 'keyword'],
396
+ 'functional/readonly-type': [ 'error', 'keyword' ],
357
397
  'functional/no-class-inheritance': 'off',
358
398
  'functional/type-declaration-immutability': [
359
399
  'error',
@@ -365,12 +405,16 @@ export const typescriptConfig = {
365
405
  comparator: 'AtLeast',
366
406
  fixer: [
367
407
  {
368
- pattern: '^(Array|Map|Set)<(.+)>$',
369
- replace: 'Readonly$1<$2>'
408
+ pattern: '^([_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*\\[\\])$',
409
+ replace: 'readonly $1'
370
410
  },
371
411
  {
372
- pattern: '^(.+)$',
373
- replace: 'Readonly<$1>'
412
+ pattern: '^(\\[.+\\])$',
413
+ replace: 'readonly $1'
414
+ },
415
+ {
416
+ pattern: '^(Map|Set)<(.+)>$',
417
+ replace: 'Readonly$1<$2>'
374
418
  }
375
419
  ]
376
420
  }
@@ -387,7 +431,9 @@ export const typescriptConfig = {
387
431
  ts: 'ignorePackages',
388
432
  mts: 'ignorePackages',
389
433
  cts: 'ignorePackages',
390
- js: 'ignorePackages',
434
+ js: 'never',
435
+ mjs: 'never',
436
+ cjs: 'never',
391
437
  json: 'ignorePackages'
392
438
  }
393
439
  ],
package/readme.md CHANGED
@@ -13,17 +13,17 @@ npm install --save-dev @enormora/eslint-config-base @enormora/eslint-config-type
13
13
  Create an ESLint configuration file (e.g., `eslint.config.js`) in your project and add the base and node config to the configuration array:
14
14
 
15
15
  ```javascript
16
- import { baseConfig } from '@enormora/eslint-config-base';
17
- import { typescriptConfig } from '@enormora/eslint-config-typescript';
16
+ import { baseConfig } from "@enormora/eslint-config-base";
17
+ import { typescriptConfig } from "@enormora/eslint-config-typescript";
18
18
 
19
19
  export default [
20
- {
21
- ignores: ['dist/**/*']
22
- },
23
- baseConfig,
24
- {
25
- ...typescriptConfig,
26
- files: ['**/*.ts']
27
- }
20
+ {
21
+ ignores: ["dist/**/*"],
22
+ },
23
+ ...baseConfig,
24
+ {
25
+ ...typescriptConfig,
26
+ files: ["**/*.ts"],
27
+ },
28
28
  ];
29
29
  ```
package/sbom.cdx.json ADDED
@@ -0,0 +1,152 @@
1
+ {
2
+ "$schema": "http://cyclonedx.org/schema/bom-1.6.schema.json",
3
+ "bomFormat": "CycloneDX",
4
+ "specVersion": "1.6",
5
+ "version": 1,
6
+ "metadata": {
7
+ "tools": {
8
+ "components": [
9
+ {
10
+ "type": "application",
11
+ "name": "packtory",
12
+ "version": "0.0.15"
13
+ }
14
+ ]
15
+ },
16
+ "component": {
17
+ "type": "library",
18
+ "name": "@enormora/eslint-config-typescript",
19
+ "version": "0.0.37",
20
+ "bom-ref": "pkg:npm/@enormora/eslint-config-typescript@0.0.37",
21
+ "purl": "pkg:npm/@enormora/eslint-config-typescript@0.0.37"
22
+ }
23
+ },
24
+ "components": [
25
+ {
26
+ "type": "library",
27
+ "name": "@enormora/eslint-config-base",
28
+ "version": "0.0.32",
29
+ "bom-ref": "pkg:npm/@enormora/eslint-config-base@0.0.32",
30
+ "scope": "optional",
31
+ "licenses": [
32
+ {
33
+ "expression": "MIT"
34
+ }
35
+ ],
36
+ "purl": "pkg:npm/@enormora/eslint-config-base@0.0.32"
37
+ },
38
+ {
39
+ "type": "library",
40
+ "name": "@typescript-eslint/eslint-plugin",
41
+ "version": "8.59.3",
42
+ "bom-ref": "pkg:npm/@typescript-eslint/eslint-plugin@8.59.3",
43
+ "scope": "required",
44
+ "licenses": [
45
+ {
46
+ "expression": "MIT"
47
+ }
48
+ ],
49
+ "purl": "pkg:npm/@typescript-eslint/eslint-plugin@8.59.3"
50
+ },
51
+ {
52
+ "type": "library",
53
+ "name": "@typescript-eslint/parser",
54
+ "version": "8.59.3",
55
+ "bom-ref": "pkg:npm/@typescript-eslint/parser@8.59.3",
56
+ "scope": "required",
57
+ "licenses": [
58
+ {
59
+ "expression": "MIT"
60
+ }
61
+ ],
62
+ "purl": "pkg:npm/@typescript-eslint/parser@8.59.3"
63
+ },
64
+ {
65
+ "type": "library",
66
+ "name": "eslint-import-resolver-typescript",
67
+ "version": "4.4.4",
68
+ "bom-ref": "pkg:npm/eslint-import-resolver-typescript@4.4.4",
69
+ "scope": "required",
70
+ "licenses": [
71
+ {
72
+ "expression": "ISC"
73
+ }
74
+ ],
75
+ "purl": "pkg:npm/eslint-import-resolver-typescript@4.4.4"
76
+ },
77
+ {
78
+ "type": "library",
79
+ "name": "eslint-plugin-functional",
80
+ "version": "9.0.4",
81
+ "bom-ref": "pkg:npm/eslint-plugin-functional@9.0.4",
82
+ "scope": "required",
83
+ "licenses": [
84
+ {
85
+ "expression": "MIT"
86
+ }
87
+ ],
88
+ "purl": "pkg:npm/eslint-plugin-functional@9.0.4"
89
+ },
90
+ {
91
+ "type": "library",
92
+ "name": "eslint-plugin-import-x",
93
+ "version": "4.16.2",
94
+ "bom-ref": "pkg:npm/eslint-plugin-import-x@4.16.2",
95
+ "scope": "required",
96
+ "licenses": [
97
+ {
98
+ "expression": "MIT"
99
+ }
100
+ ],
101
+ "purl": "pkg:npm/eslint-plugin-import-x@4.16.2"
102
+ },
103
+ {
104
+ "type": "library",
105
+ "name": "eslint-plugin-perfectionist",
106
+ "version": "5.9.0",
107
+ "bom-ref": "pkg:npm/eslint-plugin-perfectionist@5.9.0",
108
+ "scope": "required",
109
+ "licenses": [
110
+ {
111
+ "expression": "MIT"
112
+ }
113
+ ],
114
+ "purl": "pkg:npm/eslint-plugin-perfectionist@5.9.0"
115
+ }
116
+ ],
117
+ "dependencies": [
118
+ {
119
+ "ref": "pkg:npm/@enormora/eslint-config-base@0.0.32"
120
+ },
121
+ {
122
+ "ref": "pkg:npm/@enormora/eslint-config-typescript@0.0.37",
123
+ "dependsOn": [
124
+ "pkg:npm/@enormora/eslint-config-base@0.0.32",
125
+ "pkg:npm/@typescript-eslint/eslint-plugin@8.59.3",
126
+ "pkg:npm/@typescript-eslint/parser@8.59.3",
127
+ "pkg:npm/eslint-import-resolver-typescript@4.4.4",
128
+ "pkg:npm/eslint-plugin-functional@9.0.4",
129
+ "pkg:npm/eslint-plugin-import-x@4.16.2",
130
+ "pkg:npm/eslint-plugin-perfectionist@5.9.0"
131
+ ]
132
+ },
133
+ {
134
+ "ref": "pkg:npm/@typescript-eslint/eslint-plugin@8.59.3"
135
+ },
136
+ {
137
+ "ref": "pkg:npm/@typescript-eslint/parser@8.59.3"
138
+ },
139
+ {
140
+ "ref": "pkg:npm/eslint-import-resolver-typescript@4.4.4"
141
+ },
142
+ {
143
+ "ref": "pkg:npm/eslint-plugin-functional@9.0.4"
144
+ },
145
+ {
146
+ "ref": "pkg:npm/eslint-plugin-import-x@4.16.2"
147
+ },
148
+ {
149
+ "ref": "pkg:npm/eslint-plugin-perfectionist@5.9.0"
150
+ }
151
+ ]
152
+ }