@xylabs/eslint-config-flat 8.6.10 → 8.6.12

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.
Files changed (98) hide show
  1. package/README.md +1 -148
  2. package/dist/neutral/index.d.ts +1 -19
  3. package/dist/neutral/index.d.ts.map +1 -1
  4. package/dist/neutral/index.mjs +1 -1522
  5. package/dist/neutral/index.mjs.map +4 -4
  6. package/dist/node/index.d.ts +1 -19
  7. package/dist/node/index.d.ts.map +1 -1
  8. package/dist/node/index.mjs +1 -1522
  9. package/dist/node/index.mjs.map +4 -4
  10. package/package.json +8 -49
  11. package/dist/neutral/core/index.d.ts +0 -5
  12. package/dist/neutral/core/index.d.ts.map +0 -1
  13. package/dist/neutral/ignores.d.ts +0 -2
  14. package/dist/neutral/ignores.d.ts.map +0 -1
  15. package/dist/neutral/import/index.d.ts +0 -3
  16. package/dist/neutral/import/index.d.ts.map +0 -1
  17. package/dist/neutral/json/index.d.ts +0 -5
  18. package/dist/neutral/json/index.d.ts.map +0 -1
  19. package/dist/neutral/markdown/index.d.ts +0 -3
  20. package/dist/neutral/markdown/index.d.ts.map +0 -1
  21. package/dist/neutral/rules/consistency.d.ts +0 -3
  22. package/dist/neutral/rules/consistency.d.ts.map +0 -1
  23. package/dist/neutral/rules/correctness.d.ts +0 -3
  24. package/dist/neutral/rules/correctness.d.ts.map +0 -1
  25. package/dist/neutral/rules/index.d.ts +0 -6
  26. package/dist/neutral/rules/index.d.ts.map +0 -1
  27. package/dist/neutral/shared.d.ts +0 -13
  28. package/dist/neutral/shared.d.ts.map +0 -1
  29. package/dist/neutral/tiers/conflicts.d.ts +0 -22
  30. package/dist/neutral/tiers/conflicts.d.ts.map +0 -1
  31. package/dist/neutral/tiers/index.d.ts +0 -48
  32. package/dist/neutral/tiers/index.d.ts.map +0 -1
  33. package/dist/neutral/tiers/opinionated.d.ts +0 -24
  34. package/dist/neutral/tiers/opinionated.d.ts.map +0 -1
  35. package/dist/neutral/tiers/plugin-rules.d.ts +0 -8
  36. package/dist/neutral/tiers/plugin-rules.d.ts.map +0 -1
  37. package/dist/neutral/tiers/recommendedConfig.d.ts +0 -16
  38. package/dist/neutral/tiers/recommendedConfig.d.ts.map +0 -1
  39. package/dist/neutral/tiers/rule-catalog/index.d.ts +0 -13
  40. package/dist/neutral/tiers/rule-catalog/index.d.ts.map +0 -1
  41. package/dist/neutral/tiers/rule-catalog/managed-rules.d.ts +0 -4
  42. package/dist/neutral/tiers/rule-catalog/managed-rules.d.ts.map +0 -1
  43. package/dist/neutral/tiers/rule-catalog/type-checked-rules.d.ts +0 -5
  44. package/dist/neutral/tiers/rule-catalog/type-checked-rules.d.ts.map +0 -1
  45. package/dist/neutral/tiers/rule-catalog/types.d.ts +0 -14
  46. package/dist/neutral/tiers/rule-catalog/types.d.ts.map +0 -1
  47. package/dist/neutral/tiers/tier-builder.d.ts +0 -6
  48. package/dist/neutral/tiers/tier-builder.d.ts.map +0 -1
  49. package/dist/neutral/typescript/index.d.ts +0 -9
  50. package/dist/neutral/typescript/index.d.ts.map +0 -1
  51. package/dist/neutral/unicorn/index.d.ts +0 -17
  52. package/dist/neutral/unicorn/index.d.ts.map +0 -1
  53. package/dist/neutral/workspaces/index.d.ts +0 -3
  54. package/dist/neutral/workspaces/index.d.ts.map +0 -1
  55. package/dist/node/core/index.d.ts +0 -5
  56. package/dist/node/core/index.d.ts.map +0 -1
  57. package/dist/node/ignores.d.ts +0 -2
  58. package/dist/node/ignores.d.ts.map +0 -1
  59. package/dist/node/import/index.d.ts +0 -3
  60. package/dist/node/import/index.d.ts.map +0 -1
  61. package/dist/node/json/index.d.ts +0 -5
  62. package/dist/node/json/index.d.ts.map +0 -1
  63. package/dist/node/markdown/index.d.ts +0 -3
  64. package/dist/node/markdown/index.d.ts.map +0 -1
  65. package/dist/node/rules/consistency.d.ts +0 -3
  66. package/dist/node/rules/consistency.d.ts.map +0 -1
  67. package/dist/node/rules/correctness.d.ts +0 -3
  68. package/dist/node/rules/correctness.d.ts.map +0 -1
  69. package/dist/node/rules/index.d.ts +0 -6
  70. package/dist/node/rules/index.d.ts.map +0 -1
  71. package/dist/node/shared.d.ts +0 -13
  72. package/dist/node/shared.d.ts.map +0 -1
  73. package/dist/node/tiers/conflicts.d.ts +0 -22
  74. package/dist/node/tiers/conflicts.d.ts.map +0 -1
  75. package/dist/node/tiers/index.d.ts +0 -48
  76. package/dist/node/tiers/index.d.ts.map +0 -1
  77. package/dist/node/tiers/opinionated.d.ts +0 -24
  78. package/dist/node/tiers/opinionated.d.ts.map +0 -1
  79. package/dist/node/tiers/plugin-rules.d.ts +0 -8
  80. package/dist/node/tiers/plugin-rules.d.ts.map +0 -1
  81. package/dist/node/tiers/recommendedConfig.d.ts +0 -16
  82. package/dist/node/tiers/recommendedConfig.d.ts.map +0 -1
  83. package/dist/node/tiers/rule-catalog/index.d.ts +0 -13
  84. package/dist/node/tiers/rule-catalog/index.d.ts.map +0 -1
  85. package/dist/node/tiers/rule-catalog/managed-rules.d.ts +0 -4
  86. package/dist/node/tiers/rule-catalog/managed-rules.d.ts.map +0 -1
  87. package/dist/node/tiers/rule-catalog/type-checked-rules.d.ts +0 -5
  88. package/dist/node/tiers/rule-catalog/type-checked-rules.d.ts.map +0 -1
  89. package/dist/node/tiers/rule-catalog/types.d.ts +0 -14
  90. package/dist/node/tiers/rule-catalog/types.d.ts.map +0 -1
  91. package/dist/node/tiers/tier-builder.d.ts +0 -6
  92. package/dist/node/tiers/tier-builder.d.ts.map +0 -1
  93. package/dist/node/typescript/index.d.ts +0 -9
  94. package/dist/node/typescript/index.d.ts.map +0 -1
  95. package/dist/node/unicorn/index.d.ts +0 -17
  96. package/dist/node/unicorn/index.d.ts.map +0 -1
  97. package/dist/node/workspaces/index.d.ts +0 -3
  98. package/dist/node/workspaces/index.d.ts.map +0 -1
@@ -1,1524 +1,3 @@
1
- // src/json/index.ts
2
- import json from "@eslint/json";
3
-
4
- // src/ignores.ts
5
- var ignores = [
6
- ".eslintcache",
7
- ".github",
8
- ".husky",
9
- ".jest",
10
- ".next",
11
- ".vscode",
12
- ".yarn",
13
- "**/dist",
14
- "**/docs",
15
- "**/node_modules",
16
- "coverage",
17
- "cypress",
18
- "public",
19
- "storybook-static",
20
- "tmp",
21
- "yarn-error.log",
22
- "yarn.lock"
23
- ];
24
-
25
- // src/json/index.ts
26
- var jsonConfig = {
27
- ignores,
28
- files: ["**/*.json"],
29
- plugins: { json },
30
- language: "json/json",
31
- rules: { "json/no-duplicate-keys": ["error"] }
32
- };
33
- var jsoncConfig = {
34
- ignores,
35
- files: ["**/*.jsonc"],
36
- plugins: { json },
37
- language: "json/jsonc",
38
- rules: { "json/no-duplicate-keys": ["error"] }
39
- };
40
- var json5Config = {
41
- ignores,
42
- files: ["**/*.json5"],
43
- plugins: { json },
44
- language: "json/json5",
45
- rules: { "json/no-duplicate-keys": ["error"] }
46
- };
47
-
48
- // src/markdown/index.ts
49
- import markdown from "@eslint/markdown";
50
-
51
- // src/shared.ts
52
- import tsParser from "@typescript-eslint/parser";
53
- var scriptFiles = [
54
- "**/*.ts",
55
- "**/*.tsx",
56
- "**/*.mts",
57
- "**/*.cts",
58
- "**/*.js",
59
- "**/*.jsx",
60
- "**/*.cjs",
61
- "**/*.mjs",
62
- "**/*.d.ts",
63
- "**/*.d.tsx",
64
- "**/*.d.jsx",
65
- "**/*.d.mts",
66
- "**/*.d.cts"
67
- ];
68
- var scriptLanguageOptions = {
69
- ecmaVersion: "latest",
70
- parser: tsParser,
71
- parserOptions: { ecmaFeatures: { jsx: true } },
72
- sourceType: "module"
73
- };
74
- function currentWorkingDirectory() {
75
- return globalThis.process?.cwd?.();
76
- }
77
- var tsconfigRootDir = currentWorkingDirectory();
78
- var typeCheckedParserOptions = {
79
- ...scriptLanguageOptions.parserOptions,
80
- projectService: true
81
- };
82
- if (tsconfigRootDir !== void 0) {
83
- typeCheckedParserOptions.tsconfigRootDir = tsconfigRootDir;
84
- }
85
- var typeCheckedLanguageOptions = {
86
- ...scriptLanguageOptions,
87
- parserOptions: typeCheckedParserOptions
88
- };
89
- function unique(values) {
90
- return [...new Set(values.filter((value) => value !== void 0))];
91
- }
92
- function mergeLanguageOptions(base, next) {
93
- if (!base) return next;
94
- if (!next) return base;
95
- return {
96
- ...base,
97
- ...next,
98
- globals: {
99
- ...base.globals,
100
- ...next.globals
101
- },
102
- parserOptions: {
103
- ...base.parserOptions,
104
- ...next.parserOptions
105
- }
106
- };
107
- }
108
- function scopeConfig(config2, {
109
- files,
110
- languageOptions
111
- } = {}) {
112
- const merged = mergeLanguageOptions(languageOptions, config2.languageOptions);
113
- const result = {
114
- ...config2,
115
- files: files ?? config2.files,
116
- ignores: unique([...config2.ignores ?? [], ...ignores])
117
- };
118
- if (merged) {
119
- result.languageOptions = merged;
120
- }
121
- return result;
122
- }
123
- function scopeConfigs(configs, options = {}) {
124
- return (Array.isArray(configs) ? configs : [configs]).map((config2) => scopeConfig(config2, options));
125
- }
126
-
127
- // src/markdown/index.ts
128
- var markdownFiles = ["**/*.md"];
129
- var markdownConfig = [
130
- ...scopeConfigs(markdown.configs.recommended),
131
- scopeConfig({ rules: { "markdown/fenced-code-language": "off" } }, { files: markdownFiles })
132
- ];
133
-
134
- // src/core/index.ts
135
- import js from "@eslint/js";
136
-
137
- // src/rules/consistency.ts
138
- var consistencyRulesConfig = {
139
- ignores,
140
- rules: {
141
- "complexity": ["error", 18],
142
- "max-depth": ["error", 6],
143
- "max-lines": [
144
- "error",
145
- {
146
- max: 512,
147
- skipBlankLines: true
148
- }
149
- ],
150
- "array-element-newline": ["warn", "consistent"],
151
- // Owned by max-nested-callbacks — measures callback nesting, not call depth
152
- "max-nested-callbacks": ["error", 6],
153
- "max-statements": ["error", 32],
154
- "no-tabs": ["error"]
155
- }
156
- };
157
-
158
- // src/rules/correctness.ts
159
- var restrictedImportPaths = [
160
- "./index.ts",
161
- "../index.ts",
162
- "../../index.ts",
163
- "../../../index.ts",
164
- "../../../../index.ts",
165
- "../../../../../index.ts",
166
- "../../../../../../index.ts",
167
- "../../../../../../../index.ts"
168
- ];
169
- var correctnessRulesConfig = {
170
- ignores,
171
- rules: {
172
- // Owned by @typescript-eslint/no-unused-vars
173
- "no-unused-vars": "off",
174
- // Owned by unicorn/escape-case
175
- "no-useless-escape": "off",
176
- // Owned by unicorn/prefer-spread
177
- "prefer-spread": "off",
178
- "no-restricted-imports": [
179
- "error",
180
- { paths: restrictedImportPaths }
181
- ]
182
- }
183
- };
184
-
185
- // src/rules/index.ts
186
- var restrictedImportPaths2 = [
187
- "./index.ts",
188
- "../index.ts",
189
- "../../index.ts",
190
- "../../../index.ts",
191
- "../../../../index.ts",
192
- "../../../../../index.ts",
193
- "../../../../../../index.ts",
194
- "../../../../../../../index.ts"
195
- ];
196
- var restrictedSrcImportPatterns = [
197
- {
198
- group: [
199
- "**/src/**",
200
- "**/src",
201
- "src/**"
202
- ],
203
- message: "Do not import from another package's src folder. Import the package by its public entry point instead."
204
- }
205
- ];
206
- var rulesConfig = {
207
- ignores,
208
- rules: {
209
- ...correctnessRulesConfig.rules,
210
- ...consistencyRulesConfig.rules
211
- }
212
- };
213
- var srcImportsConfig = {
214
- files: scriptFiles.map((pattern) => `**/src/${pattern}`),
215
- ignores,
216
- rules: {
217
- "no-restricted-imports": [
218
- "error",
219
- {
220
- paths: restrictedImportPaths2,
221
- patterns: restrictedSrcImportPatterns
222
- }
223
- ]
224
- }
225
- };
226
-
227
- // src/unicorn/index.ts
228
- import unicornPlugin from "eslint-plugin-unicorn";
229
- var compareStrings = (left, right) => left.localeCompare(right);
230
- var unicornRecommendedRules = unicornPlugin.configs.recommended.rules ?? {};
231
- var unicornUnopinionatedConfig = unicornPlugin.configs.unopinionated;
232
- var unicornUnopinionatedRules = unicornUnopinionatedConfig.rules ?? {};
233
- var unicornOpinionatedRules = Object.entries(unicornRecommendedRules).filter(([rule2, severity]) => severity !== "off" && unicornUnopinionatedRules[rule2] === "off").map(([rule2]) => rule2).toSorted(compareStrings);
234
- var unicornV66MigrationQueue = [
235
- "unicorn/class-reference-in-static-methods",
236
- "unicorn/comment-content",
237
- "unicorn/consistent-export-decorator-position",
238
- "unicorn/consistent-optional-chaining",
239
- "unicorn/explicit-timer-delay",
240
- "unicorn/no-array-reverse",
241
- "unicorn/no-array-sort",
242
- "unicorn/no-break-in-nested-loop",
243
- "unicorn/no-computed-property-existence-check",
244
- "unicorn/no-confusing-array-with",
245
- "unicorn/no-declarations-before-early-exit",
246
- "unicorn/no-duplicate-loops",
247
- "unicorn/no-error-property-assignment",
248
- "unicorn/no-for-each",
249
- "unicorn/no-global-object-property-assignment",
250
- "unicorn/no-incorrect-template-string-interpolation",
251
- "unicorn/no-invalid-argument-count",
252
- "unicorn/no-mismatched-map-key",
253
- "unicorn/no-negated-array-predicate",
254
- "unicorn/no-negated-comparison",
255
- "unicorn/no-object-methods-with-collections",
256
- "unicorn/no-optional-chaining-on-undeclared-variable",
257
- "unicorn/no-redundant-comparison",
258
- "unicorn/no-return-array-push",
259
- "unicorn/no-subtraction-comparison",
260
- "unicorn/no-top-level-side-effects",
261
- "unicorn/no-undeclared-class-members",
262
- "unicorn/no-unnecessary-global-this",
263
- "unicorn/no-unnecessary-splice",
264
- "unicorn/no-unreadable-new-expression",
265
- "unicorn/no-unreadable-object-destructuring",
266
- "unicorn/no-unsafe-buffer-conversion",
267
- "unicorn/no-unsafe-property-key",
268
- "unicorn/no-unsafe-string-replacement",
269
- "unicorn/no-useless-boolean-cast",
270
- "unicorn/no-useless-concat",
271
- "unicorn/no-useless-else",
272
- "unicorn/no-useless-recursion",
273
- "unicorn/no-useless-template-literals",
274
- "unicorn/prefer-add-event-listener-options",
275
- "unicorn/prefer-array-from-map",
276
- "unicorn/prefer-await",
277
- "unicorn/prefer-direct-iteration",
278
- "unicorn/prefer-early-return",
279
- "unicorn/prefer-global-number-constants",
280
- "unicorn/prefer-identifier-import-export-specifiers",
281
- "unicorn/prefer-iterable-in-constructor",
282
- "unicorn/prefer-iterator-to-array",
283
- "unicorn/prefer-location-assign",
284
- "unicorn/prefer-minimal-ternary",
285
- "unicorn/prefer-number-coercion",
286
- "unicorn/prefer-number-is-safe-integer",
287
- "unicorn/prefer-object-define-properties",
288
- "unicorn/prefer-object-destructuring-defaults",
289
- "unicorn/prefer-object-iterable-methods",
290
- "unicorn/prefer-path2d",
291
- "unicorn/prefer-private-class-fields",
292
- "unicorn/prefer-scoped-selector",
293
- "unicorn/prefer-short-arrow-method",
294
- "unicorn/prefer-simple-sort-comparator",
295
- "unicorn/prefer-single-array-predicate",
296
- "unicorn/prefer-single-object-destructuring",
297
- "unicorn/prefer-smaller-scope",
298
- "unicorn/prefer-type-literal-last",
299
- "unicorn/prefer-uint8array-base64",
300
- "unicorn/prefer-unicode-code-point-escapes",
301
- "unicorn/prefer-url-href",
302
- "unicorn/require-proxy-trap-boolean-return"
303
- ];
304
- var unicornGloballyDisabledRules = [
305
- "unicorn/consistent-boolean-name",
306
- "unicorn/require-array-sort-compare"
307
- ];
308
- var unicornGloballyDisabledRuleSet = new Set(unicornGloballyDisabledRules);
309
- var unicornV67MigrationQueue = [
310
- "unicorn/logical-assignment-operators",
311
- "unicorn/no-array-splice",
312
- "unicorn/no-non-function-verb-prefix",
313
- "unicorn/no-top-level-assignment-in-function",
314
- "unicorn/no-uncalled-method",
315
- "unicorn/no-unreadable-for-of-expression",
316
- "unicorn/no-useless-coercion",
317
- "unicorn/no-useless-continue",
318
- "unicorn/no-useless-override",
319
- "unicorn/operator-assignment",
320
- "unicorn/prefer-array-slice",
321
- "unicorn/prefer-else-if",
322
- "unicorn/prefer-has-check",
323
- "unicorn/prefer-map-from-entries"
324
- ];
325
- var unicornV69MigrationQueue = [
326
- "unicorn/consistent-conditional-object-spread",
327
- "unicorn/consistent-tuple-labels",
328
- "unicorn/default-export-style",
329
- "unicorn/no-accidental-bitwise-operator",
330
- "unicorn/no-array-concat-in-loop",
331
- "unicorn/no-array-sort-for-min-max",
332
- "unicorn/no-boolean-sort-comparator",
333
- "unicorn/no-chained-comparison",
334
- "unicorn/no-collection-bracket-access",
335
- "unicorn/no-constant-zero-expression",
336
- "unicorn/no-double-comparison",
337
- "unicorn/no-duplicate-if-branches",
338
- "unicorn/no-duplicate-logical-operands",
339
- "unicorn/no-impossible-length-comparison",
340
- "unicorn/no-invalid-character-comparison",
341
- "unicorn/no-invalid-well-known-symbol-methods",
342
- "unicorn/no-late-event-control",
343
- "unicorn/no-loop-iterable-mutation",
344
- "unicorn/no-misrefactored-assignment",
345
- "unicorn/no-nonstandard-builtin-properties",
346
- "unicorn/no-selector-as-dom-name",
347
- "unicorn/no-unnecessary-boolean-comparison",
348
- "unicorn/no-useless-compound-assignment",
349
- "unicorn/no-useless-delete-check",
350
- "unicorn/no-useless-logical-operand",
351
- "unicorn/no-xor-as-exponentiation",
352
- "unicorn/prefer-abort-signal-timeout",
353
- "unicorn/prefer-aggregate-error",
354
- "unicorn/prefer-array-from-async",
355
- "unicorn/prefer-array-iterable-methods",
356
- "unicorn/prefer-boolean-return",
357
- "unicorn/prefer-continue",
358
- "unicorn/prefer-dom-node-replace-children",
359
- "unicorn/prefer-flat-math-min-max",
360
- "unicorn/prefer-hoisting-branch-code",
361
- "unicorn/prefer-math-constants",
362
- "unicorn/prefer-observer-apis",
363
- "unicorn/prefer-promise-try",
364
- "unicorn/prefer-promise-with-resolvers",
365
- "unicorn/prefer-set-methods",
366
- "unicorn/prefer-single-replace",
367
- "unicorn/prefer-toggle-attribute",
368
- "unicorn/prefer-unary-minus",
369
- "unicorn/prefer-url-can-parse",
370
- "unicorn/prefer-url-search-parameters",
371
- "unicorn/prefer-while-loop-condition"
372
- ];
373
- function isEnabledOpinionatedRule(rule2, tier) {
374
- if (unicornGloballyDisabledRuleSet.has(rule2)) {
375
- return false;
376
- }
377
- if (tier < 4) {
378
- return !unicornV67MigrationQueue.includes(rule2) && !unicornV69MigrationQueue.includes(rule2);
379
- }
380
- return true;
381
- }
382
- function unicornOpinionatedRulesForTier(tier) {
383
- return unicornOpinionatedRules.filter((rule2) => isEnabledOpinionatedRule(rule2, tier));
384
- }
385
- function unicornOpinionatedRuleEntries(severity, tier = 4) {
386
- return Object.fromEntries(unicornOpinionatedRulesForTier(tier).map((rule2) => [rule2, severity]));
387
- }
388
- var unicornExperimentalMigrationQueue = unicornV67MigrationQueue;
389
- var unicornV66NewRules = unicornV66MigrationQueue;
390
- function unicornQueueRules(queue, severity) {
391
- return Object.fromEntries(queue.map((rule2) => [rule2, severity]));
392
- }
393
- var unicornConfig = {
394
- ...unicornUnopinionatedConfig,
395
- plugins: { unicorn: unicornPlugin },
396
- rules: {
397
- ...unicornUnopinionatedRules,
398
- ...unicornQueueRules(unicornV66MigrationQueue, "off"),
399
- ...unicornQueueRules(unicornV67MigrationQueue, "off"),
400
- ...unicornQueueRules(unicornV69MigrationQueue, "off"),
401
- // Owned by @typescript-eslint/member-ordering
402
- "unicorn/consistent-class-member-order": ["off"],
403
- // Owned by max-nested-callbacks
404
- "unicorn/max-nested-calls": ["off"],
405
- // Tier 3 opinionated — enabled in opinionatedConfig
406
- "unicorn/new-for-builtins": ["off"],
407
- // Formatting — candidate for stylistic tier; overlaps @stylistic formatting
408
- "unicorn/number-literal-case": ["off"],
409
- // Boolean naming is too disruptive for org-wide enforcement
410
- "unicorn/consistent-boolean-name": ["off"],
411
- // Sort comparators are often intentional (locale, numeric, custom keys)
412
- "unicorn/require-array-sort-compare": ["off"],
413
- "unicorn/prefer-module": ["off"],
414
- "unicorn/prefer-top-level-await": ["off"],
415
- "unicorn/name-replacements": ["off"],
416
- "unicorn/prefer-https": ["off"],
417
- "unicorn/no-useless-undefined": "warn"
418
- }
419
- };
420
-
421
- // src/core/index.ts
422
- var correctnessCoreConfig = [
423
- scopeConfig(js.configs.recommended, { files: scriptFiles, languageOptions: scriptLanguageOptions }),
424
- correctnessRulesConfig,
425
- srcImportsConfig
426
- ];
427
- var bestPracticesCoreConfig = [
428
- scopeConfig(unicornConfig, { files: scriptFiles })
429
- ];
430
- var coreConfig = [
431
- ...correctnessCoreConfig,
432
- consistencyRulesConfig,
433
- ...bestPracticesCoreConfig
434
- ];
435
-
436
- // src/import/index.ts
437
- import importPlugin from "eslint-plugin-import-x";
438
- import simpleImportSort from "eslint-plugin-simple-import-sort";
439
- var importFlatConfigs = importPlugin.flatConfigs;
440
- var importConfig = [
441
- scopeConfig(importFlatConfigs.recommended, { files: scriptFiles, languageOptions: scriptLanguageOptions }),
442
- scopeConfig(importFlatConfigs.typescript, { files: scriptFiles, languageOptions: scriptLanguageOptions }),
443
- {
444
- files: scriptFiles,
445
- languageOptions: scriptLanguageOptions,
446
- plugins: {
447
- "import-x": importPlugin,
448
- "simple-import-sort": simpleImportSort
449
- },
450
- settings: { "import-x/resolver": { typescript: { alwaysTryTypes: true, project: "./tsconfig.json" } } },
451
- rules: {
452
- // Owned by simple-import-sort/imports
453
- "simple-import-sort/imports": ["warn"],
454
- "simple-import-sort/exports": ["warn"],
455
- // Type-aware resolution is slow and requires per-repo resolver setup
456
- "import-x/default": ["off"],
457
- "import-x/named": ["off"],
458
- "import-x/namespace": ["off"],
459
- "import-x/no-unresolved": ["off"],
460
- "import-x/no-absolute-path": ["warn"],
461
- "import-x/no-cycle": [
462
- "warn",
463
- { maxDepth: 5 }
464
- ],
465
- "import-x/no-deprecated": ["off"],
466
- "import-x/no-named-as-default-member": ["off"],
467
- "import-x/no-named-as-default": ["off"],
468
- "import-x/no-restricted-paths": ["warn"],
469
- "import-x/no-self-import": ["warn"],
470
- "import-x/no-useless-path-segments": ["warn"]
471
- }
472
- }
473
- ];
474
-
475
- // src/tiers/conflicts.ts
476
- var RULE_OWNERSHIP_GROUPS = [
477
- {
478
- description: "Class member ordering with alphabetical within-group sorting",
479
- owner: "@typescript-eslint/member-ordering",
480
- disabled: ["unicorn/consistent-class-member-order"]
481
- },
482
- {
483
- description: "Callback nesting depth limit",
484
- owner: "max-nested-callbacks",
485
- disabled: ["unicorn/max-nested-calls"]
486
- },
487
- {
488
- description: "Spread over Function.prototype.apply",
489
- owner: "unicorn/prefer-spread",
490
- disabled: ["prefer-spread"]
491
- },
492
- {
493
- description: "Semicolon style",
494
- owner: "@stylistic/semi",
495
- disabled: ["semi"]
496
- },
497
- {
498
- description: "Quote style",
499
- owner: "@stylistic/quotes",
500
- disabled: ["quotes"]
501
- },
502
- {
503
- description: "Unused variable detection with TypeScript support",
504
- owner: "@typescript-eslint/no-unused-vars",
505
- disabled: ["no-unused-vars"]
506
- },
507
- {
508
- description: "Escape sequence casing in strings and regexes",
509
- owner: "unicorn/escape-case",
510
- disabled: ["no-useless-escape"]
511
- },
512
- {
513
- description: "Negated condition style",
514
- owner: "unicorn/no-negated-condition",
515
- disabled: ["no-negated-condition"]
516
- },
517
- {
518
- description: "Nested ternary restrictions",
519
- owner: "unicorn/no-unnecessary-nested-ternary",
520
- disabled: ["no-nested-ternary", "unicorn/no-nested-ternary"]
521
- },
522
- {
523
- description: "Import statement ordering",
524
- owner: "simple-import-sort/imports",
525
- disabled: ["import-x/order"]
526
- },
527
- {
528
- description: "Explicit boolean coercion for non-boolean values",
529
- owner: "@typescript-eslint/strict-boolean-expressions",
530
- disabled: ["no-extra-boolean-cast", "unicorn/no-useless-boolean-cast"]
531
- }
532
- ];
533
- function getRuleSeverity(setting) {
534
- if (setting === void 0) {
535
- return void 0;
536
- }
537
- const level = Array.isArray(setting) ? setting[0] : setting;
538
- if (level === "off" || level === 0) {
539
- return "off";
540
- }
541
- if (level === "warn" || level === 1) {
542
- return "warn";
543
- }
544
- if (level === "error" || level === 2) {
545
- return "error";
546
- }
547
- return void 0;
548
- }
549
- function isRuleEnabled(setting) {
550
- const severity = getRuleSeverity(setting);
551
- return severity !== void 0 && severity !== "off";
552
- }
553
- function mergeConfigRules(configs) {
554
- const merged = {};
555
- for (const entry of configs) {
556
- if (!entry.rules) {
557
- continue;
558
- }
559
- Object.assign(merged, entry.rules);
560
- }
561
- return merged;
562
- }
563
- function findRuleOwnershipConflicts(rules) {
564
- const conflicts = [];
565
- for (const group of RULE_OWNERSHIP_GROUPS) {
566
- const ownerSetting = rules[group.owner];
567
- if (!isRuleEnabled(ownerSetting)) {
568
- continue;
569
- }
570
- for (const conflictingRule of group.disabled) {
571
- if (isRuleEnabled(rules[conflictingRule])) {
572
- conflicts.push({
573
- description: group.description,
574
- owner: group.owner,
575
- conflictingRule,
576
- ownerSetting,
577
- conflictingSetting: rules[conflictingRule]
578
- });
579
- }
580
- }
581
- }
582
- return conflicts;
583
- }
584
- function assertNoRuleOwnershipConflicts(configs) {
585
- const conflicts = findRuleOwnershipConflicts(mergeConfigRules(configs));
586
- if (conflicts.length === 0) {
587
- return;
588
- }
589
- const details = conflicts.map((conflict) => `${conflict.owner} conflicts with ${conflict.conflictingRule} (${conflict.description})`).join("\n");
590
- throw new Error(`ESLint rule ownership conflicts detected:
591
- ${details}`);
592
- }
593
-
594
- // src/typescript/index.ts
595
- import esStylistic from "@stylistic/eslint-plugin";
596
- import tsPlugin from "@typescript-eslint/eslint-plugin";
597
- var flatConfigs = tsPlugin.configs;
598
- var memberOrderingRule = [
599
- "warn",
600
- {
601
- default: {
602
- memberTypes: [
603
- "signature",
604
- "call-signature",
605
- "public-static-field",
606
- "protected-static-field",
607
- "private-static-field",
608
- "public-decorated-field",
609
- "protected-decorated-field",
610
- "private-decorated-field",
611
- "public-instance-field",
612
- "protected-instance-field",
613
- "private-instance-field",
614
- "public-abstract-field",
615
- "protected-abstract-field",
616
- "public-field",
617
- "protected-field",
618
- "private-field",
619
- "static-field",
620
- "instance-field",
621
- "abstract-field",
622
- "decorated-field",
623
- "field",
624
- "public-constructor",
625
- "protected-constructor",
626
- "private-constructor",
627
- "constructor",
628
- ["public-static-get", "public-static-set"],
629
- ["protected-static-get", "protected-static-set"],
630
- ["private-static-get", "private-static-set"],
631
- ["public-decorated-get", "public-decorated-set"],
632
- ["protected-decorated-get", "protected-decorated-set"],
633
- ["private-decorated-get", "private-decorated-set"],
634
- ["public-instance-get", "public-instance-set"],
635
- ["protected-instance-get", "protected-instance-set"],
636
- ["private-instance-get", "private-instance-set"],
637
- ["public-abstract-get", "public-abstract-set"],
638
- ["protected-abstract-get", "protected-abstract-set"],
639
- ["public-get", "public-set"],
640
- ["protected-get", "protected-set"],
641
- ["private-get", "private-set"],
642
- ["static-get", "static-set"],
643
- ["instance-get", "instance-set"],
644
- ["abstract-get", "abstract-set"],
645
- ["decorated-get", "decorated-set"],
646
- "get",
647
- "set",
648
- "public-static-method",
649
- "protected-static-method",
650
- "private-static-method",
651
- "public-decorated-method",
652
- "protected-decorated-method",
653
- "private-decorated-method",
654
- "public-instance-method",
655
- "protected-instance-method",
656
- "private-instance-method",
657
- "public-abstract-method",
658
- "protected-abstract-method",
659
- "public-method",
660
- "protected-method",
661
- "private-method",
662
- "static-method",
663
- "instance-method",
664
- "abstract-method",
665
- "decorated-method",
666
- "method"
667
- ],
668
- order: "alphabetically"
669
- }
670
- }
671
- ];
672
- function createCorrectnessOverride(languageOptions) {
673
- return {
674
- files: scriptFiles,
675
- languageOptions,
676
- rules: {
677
- "@typescript-eslint/no-unused-vars": [
678
- "warn",
679
- {
680
- argsIgnorePattern: "^_",
681
- varsIgnorePattern: "^_",
682
- ignoreRestSiblings: true
683
- }
684
- ],
685
- "@typescript-eslint/require-await": "off",
686
- "@typescript-eslint/explicit-module-boundary-types": "off",
687
- "@typescript-eslint/no-empty-object-type": ["off"],
688
- "@typescript-eslint/triple-slash-reference": ["off"],
689
- // Tier 3 opinionated — enabled in opinionatedConfig
690
- "@typescript-eslint/strict-boolean-expressions": ["off"],
691
- // Owned by @stylistic/quotes
692
- "quotes": ["off"],
693
- // Owned by @stylistic/semi
694
- "semi": ["off"],
695
- // Owned by unicorn/prefer-spread
696
- "prefer-spread": ["off"],
697
- "require-await": "off"
698
- }
699
- };
700
- }
701
- function createConsistencyOverride(languageOptions) {
702
- return {
703
- files: scriptFiles,
704
- languageOptions,
705
- plugins: { "@stylistic": esStylistic },
706
- rules: {
707
- ...esStylistic.configs.recommended.rules,
708
- "@typescript-eslint/no-empty-function": "warn",
709
- "@stylistic/eol-last": "warn",
710
- "@typescript-eslint/explicit-member-accessibility": ["warn", { accessibility: "no-public" }],
711
- "@stylistic/brace-style": ["warn", "1tbs", { allowSingleLine: true }],
712
- "@stylistic/quotes": ["warn", "single", { avoidEscape: true }],
713
- "@typescript-eslint/consistent-type-imports": ["warn", { fixStyle: "separate-type-imports", prefer: "type-imports" }],
714
- "@stylistic/object-property-newline": ["warn", { allowAllPropertiesOnSameLine: true }],
715
- "@stylistic/function-call-argument-newline": ["warn", "consistent"],
716
- "@stylistic/function-paren-newline": ["warn", "multiline-arguments"],
717
- "@stylistic/member-delimiter-style": [
718
- "error",
719
- {
720
- multiline: {
721
- delimiter: "none",
722
- requireLast: true
723
- },
724
- singleline: {
725
- delimiter: "semi",
726
- requireLast: false
727
- }
728
- }
729
- ],
730
- "@stylistic/object-curly-newline": ["warn", {
731
- ObjectExpression: {
732
- multiline: true,
733
- minProperties: 3,
734
- consistent: false
735
- },
736
- ObjectPattern: {
737
- multiline: true,
738
- minProperties: 3,
739
- consistent: false
740
- },
741
- ImportDeclaration: {
742
- multiline: true,
743
- minProperties: 3,
744
- consistent: false
745
- },
746
- ExportDeclaration: {
747
- multiline: true,
748
- minProperties: 3,
749
- consistent: false
750
- }
751
- }],
752
- "@stylistic/max-len": ["warn", { code: 200 }],
753
- "no-restricted-syntax": [
754
- "warn",
755
- {
756
- selector: "TSEnumDeclaration",
757
- message: "Enums are disallowed. Consider using a union of string literals or a `const` object instead."
758
- }
759
- ],
760
- "@typescript-eslint/member-ordering": memberOrderingRule
761
- }
762
- };
763
- }
764
- var typescriptDelegationConfig = {
765
- files: scriptFiles,
766
- rules: {
767
- // Owned by unicorn/prefer-spread — stylistic presets may re-enable the core rule
768
- "prefer-spread": "off",
769
- // Owned by @stylistic/semi
770
- "semi": "off",
771
- // Owned by @stylistic/quotes
772
- "quotes": "off"
773
- }
774
- };
775
- var typescriptCorrectnessConfig = [
776
- ...scopeConfigs(flatConfigs["flat/recommended"], { files: scriptFiles, languageOptions: scriptLanguageOptions }),
777
- createCorrectnessOverride(scriptLanguageOptions)
778
- ];
779
- var typescriptConsistencyConfig = [
780
- ...scopeConfigs(flatConfigs["flat/stylistic"], { files: scriptFiles, languageOptions: scriptLanguageOptions }),
781
- createConsistencyOverride(scriptLanguageOptions)
782
- ];
783
- var typescriptTypeCheckedCorrectnessConfig = [
784
- ...scopeConfigs(flatConfigs["flat/recommended-type-checked"], { files: scriptFiles, languageOptions: typeCheckedLanguageOptions }),
785
- createCorrectnessOverride(typeCheckedLanguageOptions),
786
- {
787
- files: scriptFiles,
788
- languageOptions: typeCheckedLanguageOptions,
789
- rules: { "@typescript-eslint/no-deprecated": "warn" }
790
- }
791
- ];
792
- var typescriptTypeCheckedConsistencyConfig = [
793
- ...scopeConfigs(flatConfigs["flat/stylistic-type-checked"], { files: scriptFiles, languageOptions: typeCheckedLanguageOptions }),
794
- createConsistencyOverride(typeCheckedLanguageOptions)
795
- ];
796
- var typescriptConfig = [
797
- ...typescriptCorrectnessConfig,
798
- ...typescriptConsistencyConfig,
799
- typescriptDelegationConfig
800
- ];
801
- var typescriptTypeCheckedConfig = [
802
- ...typescriptTypeCheckedCorrectnessConfig,
803
- ...typescriptTypeCheckedConsistencyConfig,
804
- typescriptDelegationConfig
805
- ];
806
-
807
- // src/workspaces/index.ts
808
- import workspacesPlugin from "eslint-plugin-workspaces";
809
- var workspacesConfig = {
810
- plugins: { workspaces: workspacesPlugin },
811
- rules: {
812
- ...workspacesPlugin.configs.recommended.rules,
813
- // Tier 3 opinionated — enabled in opinionatedConfig
814
- "workspaces/no-relative-imports": ["off"],
815
- "workspaces/require-dependency": ["off"]
816
- }
817
- };
818
-
819
- // src/tiers/rule-catalog/managed-rules.ts
820
- var filenameCaseRuleOptions = {
821
- cases: {
822
- camelCase: true,
823
- kebabCase: true,
824
- pascalCase: true
825
- }
826
- };
827
- function filenameCaseRule(severity) {
828
- return [severity, filenameCaseRuleOptions];
829
- }
830
- function rule(name, plugin, category, introducedAtTier, severityAtTier, options, isTypeCheckingRequired = false) {
831
- return {
832
- category,
833
- introducedAtTier,
834
- isTypeCheckingRequired,
835
- options,
836
- plugin,
837
- rule: name,
838
- severityAtTier
839
- };
840
- }
841
- var MANAGED_RULES = [
842
- // Tier 0 — correctness
843
- rule("no-unused-vars", "eslint", "correctness", 0, { 0: "off" }),
844
- rule("no-useless-escape", "eslint", "correctness", 0, { 0: "off" }),
845
- rule("prefer-spread", "eslint", "correctness", 0, { 0: "off" }),
846
- rule("no-restricted-imports", "eslint", "correctness", 0, { 0: "error" }),
847
- rule("@typescript-eslint/no-unused-vars", "@typescript-eslint", "correctness", 0, { 0: "warn" }, [
848
- "warn",
849
- {
850
- argsIgnorePattern: "^_",
851
- ignoreRestSiblings: true,
852
- varsIgnorePattern: "^_"
853
- }
854
- ]),
855
- rule("@typescript-eslint/require-await", "@typescript-eslint", "correctness", 0, { 0: "off" }),
856
- rule("@typescript-eslint/explicit-module-boundary-types", "@typescript-eslint", "correctness", 0, { 0: "off" }),
857
- rule("@typescript-eslint/no-empty-object-type", "@typescript-eslint", "correctness", 0, { 0: "off" }),
858
- rule("@typescript-eslint/triple-slash-reference", "@typescript-eslint", "correctness", 0, { 0: "off" }),
859
- rule("@typescript-eslint/strict-boolean-expressions", "@typescript-eslint", "correctness", 0, { 0: "off", 3: "error" }, void 0, true),
860
- rule("@typescript-eslint/no-deprecated", "@typescript-eslint", "correctness", 0, { 0: "warn", 3: "error" }, void 0, true),
861
- rule("quotes", "eslint", "correctness", 0, { 0: "off" }),
862
- rule("semi", "eslint", "correctness", 0, { 0: "off" }),
863
- rule("require-await", "eslint", "correctness", 0, { 0: "off" }),
864
- // Tier 1 — consistency
865
- rule("complexity", "eslint", "consistency", 1, { 1: "error" }, ["error", 18]),
866
- rule("max-depth", "eslint", "consistency", 1, { 1: "error" }, ["error", 6]),
867
- rule("max-lines", "eslint", "consistency", 1, { 1: "error" }, ["error", { max: 512, skipBlankLines: true }]),
868
- rule("array-element-newline", "eslint", "consistency", 1, { 1: "warn", 3: "error" }, ["warn", "consistent"]),
869
- rule("max-nested-callbacks", "eslint", "consistency", 1, { 1: "error" }),
870
- rule("max-statements", "eslint", "consistency", 1, { 1: "error" }, ["error", 32]),
871
- rule("no-tabs", "eslint", "consistency", 1, { 1: "error" }),
872
- rule("@typescript-eslint/no-empty-function", "@typescript-eslint", "consistency", 1, { 1: "warn", 3: "error" }),
873
- rule("@stylistic/eol-last", "@stylistic", "consistency", 1, { 1: "warn", 3: "error" }),
874
- rule("@typescript-eslint/explicit-member-accessibility", "@typescript-eslint", "consistency", 1, { 1: "warn", 3: "error" }, [
875
- "warn",
876
- { accessibility: "no-public" }
877
- ]),
878
- rule("@stylistic/brace-style", "@stylistic", "consistency", 1, { 1: "warn", 3: "error" }, ["warn", "1tbs", { allowSingleLine: true }]),
879
- rule("@stylistic/quotes", "@stylistic", "consistency", 1, { 1: "warn", 3: "error" }, ["warn", "single", { avoidEscape: true }]),
880
- rule("@typescript-eslint/consistent-type-imports", "@typescript-eslint", "consistency", 1, { 1: "warn", 3: "error" }, [
881
- "warn",
882
- { fixStyle: "separate-type-imports", prefer: "type-imports" }
883
- ]),
884
- rule("@stylistic/object-property-newline", "@stylistic", "consistency", 1, { 1: "warn", 3: "error" }, [
885
- "warn",
886
- { allowAllPropertiesOnSameLine: true }
887
- ]),
888
- rule("@stylistic/function-call-argument-newline", "@stylistic", "consistency", 1, { 1: "warn", 3: "error" }, ["warn", "consistent"]),
889
- rule("@stylistic/function-paren-newline", "@stylistic", "consistency", 1, { 1: "warn", 3: "error" }, ["warn", "multiline-arguments"]),
890
- rule("@stylistic/member-delimiter-style", "@stylistic", "consistency", 1, { 1: "error" }, [
891
- "error",
892
- {
893
- multiline: { delimiter: "none", requireLast: true },
894
- singleline: { delimiter: "semi", requireLast: false }
895
- }
896
- ]),
897
- rule("@stylistic/object-curly-newline", "@stylistic", "consistency", 1, { 1: "warn", 3: "error" }, [
898
- "warn",
899
- {
900
- ExportDeclaration: {
901
- consistent: false,
902
- minProperties: 3,
903
- multiline: true
904
- },
905
- ImportDeclaration: {
906
- consistent: false,
907
- minProperties: 3,
908
- multiline: true
909
- },
910
- ObjectExpression: {
911
- consistent: false,
912
- minProperties: 3,
913
- multiline: true
914
- },
915
- ObjectPattern: {
916
- consistent: false,
917
- minProperties: 3,
918
- multiline: true
919
- }
920
- }
921
- ]),
922
- rule("@stylistic/max-len", "@stylistic", "consistency", 1, { 1: "warn", 3: "error" }, ["warn", { code: 200 }]),
923
- rule("no-restricted-syntax", "eslint", "consistency", 1, { 1: "warn", 3: "error" }, [
924
- "warn",
925
- {
926
- message: "Enums are disallowed. Consider using a union of string literals or a `const` object instead.",
927
- selector: "TSEnumDeclaration"
928
- }
929
- ]),
930
- rule("@typescript-eslint/member-ordering", "@typescript-eslint", "consistency", 1, { 1: "warn", 3: "error" }),
931
- // Tier 2 — best practices (workspaces moved here from tier 0)
932
- rule("workspaces/no-relative-imports", "workspaces", "best-practices", 2, { 2: "off", 3: "error" }),
933
- rule("workspaces/require-dependency", "workspaces", "best-practices", 2, { 2: "off", 3: "error" }),
934
- rule("simple-import-sort/imports", "simple-import-sort", "best-practices", 2, { 2: "warn", 3: "error" }, ["warn"]),
935
- rule("simple-import-sort/exports", "simple-import-sort", "best-practices", 2, { 2: "warn", 3: "error" }, ["warn"]),
936
- rule("import-x/default", "import-x", "best-practices", 2, { 2: "off" }),
937
- rule("import-x/named", "import-x", "best-practices", 2, { 2: "off" }),
938
- rule("import-x/namespace", "import-x", "best-practices", 2, { 2: "off" }),
939
- rule("import-x/no-unresolved", "import-x", "best-practices", 2, { 2: "off" }),
940
- rule("import-x/no-absolute-path", "import-x", "best-practices", 2, { 2: "warn", 3: "error" }),
941
- rule("import-x/no-cycle", "import-x", "best-practices", 2, { 2: "warn", 3: "error" }, ["warn", { maxDepth: 5 }]),
942
- rule("import-x/no-deprecated", "import-x", "best-practices", 2, { 2: "off" }),
943
- rule("import-x/no-named-as-default-member", "import-x", "best-practices", 2, { 2: "off" }),
944
- rule("import-x/no-named-as-default", "import-x", "best-practices", 2, { 2: "off" }),
945
- rule("import-x/no-restricted-paths", "import-x", "best-practices", 2, { 2: "warn", 3: "error" }),
946
- rule("import-x/no-self-import", "import-x", "best-practices", 2, { 2: "warn", 3: "error" }),
947
- rule("import-x/no-useless-path-segments", "import-x", "best-practices", 2, { 2: "warn", 3: "error" }),
948
- rule("unicorn/consistent-class-member-order", "unicorn", "best-practices", 2, { 2: "off" }),
949
- rule("unicorn/max-nested-calls", "unicorn", "best-practices", 2, { 2: "off" }),
950
- rule("unicorn/catch-error-name", "unicorn", "best-practices", 2, { 2: "off" }),
951
- rule("unicorn/consistent-function-scoping", "unicorn", "best-practices", 2, { 2: "off" }),
952
- rule("unicorn/filename-case", "unicorn", "best-practices", 2, { 2: "off", 3: "error" }, filenameCaseRule("error")),
953
- rule("unicorn/new-for-builtins", "unicorn", "best-practices", 2, { 2: "off" }),
954
- rule("unicorn/no-array-callback-reference", "unicorn", "best-practices", 2, { 2: "off" }),
955
- rule("unicorn/no-await-expression-member", "unicorn", "best-practices", 2, { 2: "off", 3: "error" }),
956
- rule("unicorn/no-nested-ternary", "unicorn", "best-practices", 2, { 2: "off" }),
957
- rule("unicorn/no-null", "unicorn", "best-practices", 2, { 2: "off" }),
958
- rule("unicorn/number-literal-case", "unicorn", "best-practices", 2, { 2: "off", 3: "error" }),
959
- rule("unicorn/prefer-module", "unicorn", "best-practices", 2, { 2: "off" }),
960
- rule("unicorn/prefer-top-level-await", "unicorn", "best-practices", 2, { 2: "off" }),
961
- rule("unicorn/prevent-abbreviations", "unicorn", "best-practices", 2, { 2: "off" }),
962
- rule("unicorn/name-replacements", "unicorn", "best-practices", 2, { 2: "off" }),
963
- rule("unicorn/prefer-https", "unicorn", "best-practices", 2, { 2: "off" }),
964
- rule("unicorn/no-useless-undefined", "unicorn", "best-practices", 2, { 2: "warn", 3: "error" }),
965
- // Tier 3 — opinionated ownership delegations
966
- rule("no-extra-boolean-cast", "eslint", "opinionated", 3, { 3: "off" }),
967
- rule("unicorn/no-useless-boolean-cast", "unicorn", "opinionated", 3, { 3: "off" })
968
- ];
969
-
970
- // src/tiers/opinionated.ts
971
- var filenameCaseRuleOptions2 = {
972
- cases: {
973
- camelCase: true,
974
- kebabCase: true,
975
- pascalCase: true
976
- }
977
- };
978
- function filenameCaseRule2(severity) {
979
- return [severity, filenameCaseRuleOptions2];
980
- }
981
- function unicornQueueRules2(queue, severity) {
982
- return Object.fromEntries(queue.map((rule2) => [rule2, severity]));
983
- }
984
- function managedPromotionRules(tier) {
985
- const rules = {};
986
- for (const definition of MANAGED_RULES) {
987
- const severity = definition.severityAtTier[tier];
988
- if (severity !== "error") {
989
- continue;
990
- }
991
- const priorSeverity = definition.severityAtTier[tier - 1];
992
- if (priorSeverity === severity) {
993
- continue;
994
- }
995
- rules[definition.rule] = definition.options ?? severity;
996
- }
997
- rules["unicorn/filename-case"] = filenameCaseRule2("error");
998
- rules["no-extra-boolean-cast"] = "off";
999
- rules["unicorn/no-useless-boolean-cast"] = "off";
1000
- return rules;
1001
- }
1002
- var opinionatedLayerConfig = {
1003
- files: scriptFiles,
1004
- rules: {
1005
- "@typescript-eslint/strict-boolean-expressions": "warn",
1006
- "no-extra-boolean-cast": "off",
1007
- "unicorn/filename-case": filenameCaseRule2("warn"),
1008
- "unicorn/no-await-expression-member": "warn",
1009
- "unicorn/no-useless-boolean-cast": "off",
1010
- "unicorn/number-literal-case": "warn",
1011
- "workspaces/no-relative-imports": "warn",
1012
- "workspaces/require-dependency": "warn"
1013
- }
1014
- };
1015
- function opinionatedUnicornPresetLayerConfigForTier(tier) {
1016
- return {
1017
- files: scriptFiles,
1018
- rules: unicornOpinionatedRuleEntries("error", tier)
1019
- };
1020
- }
1021
- var opinionatedUnicornPresetLayerConfig = opinionatedUnicornPresetLayerConfigForTier(3);
1022
- var opinionatedUnicornV66LayerConfig = {
1023
- files: scriptFiles,
1024
- rules: unicornQueueRules2(unicornV66MigrationQueue, "warn")
1025
- };
1026
- var opinionatedPromotionRules = managedPromotionRules(3);
1027
- var opinionatedPromotionLayerConfig = {
1028
- files: scriptFiles,
1029
- rules: opinionatedPromotionRules
1030
- };
1031
- var strictPromotionRules = opinionatedPromotionRules;
1032
- var strictLayerConfig = opinionatedPromotionLayerConfig;
1033
- var experimentalUnicornLayerConfig = {
1034
- files: scriptFiles,
1035
- rules: unicornQueueRules2(unicornV67MigrationQueue, "warn")
1036
- };
1037
- var experimentalUnicornV69LayerConfig = {
1038
- files: scriptFiles,
1039
- rules: unicornQueueRules2(unicornV69MigrationQueue, "warn")
1040
- };
1041
- var experimentalLayerConfig = experimentalUnicornLayerConfig;
1042
- var experimentalPromotionRules = experimentalUnicornLayerConfig.rules;
1043
-
1044
- // src/tiers/rule-catalog/type-checked-rules.ts
1045
- import tsPlugin2 from "@typescript-eslint/eslint-plugin";
1046
- function ruleNamesFromConfigs(configs) {
1047
- if (!configs) return /* @__PURE__ */ new Set();
1048
- return new Set(Object.keys(mergeConfigRules(Array.isArray(configs) ? configs : [configs])));
1049
- }
1050
- function ruleNamesFromPreset(preset) {
1051
- return ruleNamesFromConfigs(preset);
1052
- }
1053
- function diffRuleSets(typeChecked, untyped) {
1054
- const onlyTypeChecked = /* @__PURE__ */ new Set();
1055
- for (const rule2 of typeChecked) {
1056
- if (!untyped.has(rule2)) {
1057
- onlyTypeChecked.add(rule2);
1058
- }
1059
- }
1060
- return onlyTypeChecked;
1061
- }
1062
- function typescriptPresetRuleDiff() {
1063
- const flatConfigs2 = tsPlugin2.configs;
1064
- const recommendedTypeChecked = ruleNamesFromPreset(flatConfigs2["flat/recommended-type-checked"]);
1065
- const recommended = ruleNamesFromPreset(flatConfigs2["flat/recommended"]);
1066
- const stylisticTypeChecked = ruleNamesFromPreset(flatConfigs2["flat/stylistic-type-checked"]);
1067
- const stylistic = ruleNamesFromPreset(flatConfigs2["flat/stylistic"]);
1068
- return /* @__PURE__ */ new Set([
1069
- ...diffRuleSets(recommendedTypeChecked, recommended),
1070
- ...diffRuleSets(stylisticTypeChecked, stylistic)
1071
- ]);
1072
- }
1073
- var EXPLICIT_TYPE_CHECKED_RULES = [
1074
- "@typescript-eslint/no-deprecated",
1075
- "@typescript-eslint/strict-boolean-expressions"
1076
- ];
1077
- var typeCheckedRuleNamesCache = {};
1078
- function collectTypeCheckedRuleNames() {
1079
- if (typeCheckedRuleNamesCache.names === void 0) {
1080
- typeCheckedRuleNamesCache.names = /* @__PURE__ */ new Set([
1081
- ...typescriptPresetRuleDiff(),
1082
- ...EXPLICIT_TYPE_CHECKED_RULES
1083
- ]);
1084
- }
1085
- return typeCheckedRuleNamesCache.names;
1086
- }
1087
- function buildTypeCheckGateRules() {
1088
- return Object.fromEntries(
1089
- [...collectTypeCheckedRuleNames()].map((rule2) => [rule2, "off"])
1090
- );
1091
- }
1092
-
1093
- // src/tiers/rule-catalog/index.ts
1094
- function severityForTier(definition, tier) {
1095
- let resolved;
1096
- for (let current = 0; current <= tier; current = current + 1) {
1097
- const severity = definition.severityAtTier[current];
1098
- if (severity !== void 0) {
1099
- resolved = severity;
1100
- }
1101
- }
1102
- return resolved;
1103
- }
1104
- function managedRulesForTier(tier, isTypeChecked) {
1105
- return MANAGED_RULES.filter((definition) => definition.introducedAtTier <= tier && (!definition.isTypeCheckingRequired || isTypeChecked));
1106
- }
1107
- function buildManagedRulesMap(tier, isTypeChecked) {
1108
- const rules = {};
1109
- for (const definition of managedRulesForTier(tier, isTypeChecked)) {
1110
- const severity = severityForTier(definition, tier);
1111
- if (severity === void 0) {
1112
- continue;
1113
- }
1114
- rules[definition.rule] = severity === "off" ? "off" : definition.options ?? severity;
1115
- }
1116
- return rules;
1117
- }
1118
- function buildManagedRulesLayer(tier, isTypeChecked) {
1119
- return {
1120
- files: scriptFiles,
1121
- rules: buildManagedRulesMap(tier, isTypeChecked)
1122
- };
1123
- }
1124
- function buildTypeCheckGateLayer() {
1125
- return {
1126
- files: scriptFiles,
1127
- rules: buildTypeCheckGateRules()
1128
- };
1129
- }
1130
- function findEnabledTypeCheckedRules(rules) {
1131
- const typeCheckedRuleNames = collectTypeCheckedRuleNames();
1132
- return [...typeCheckedRuleNames].filter((rule2) => {
1133
- const severity = getRuleSeverity(rules[rule2]);
1134
- return severity !== void 0 && severity !== "off";
1135
- }).toSorted();
1136
- }
1137
- function categoryForTier(tier) {
1138
- switch (tier) {
1139
- case 0: {
1140
- return "correctness";
1141
- }
1142
- case 1: {
1143
- return "consistency";
1144
- }
1145
- case 2: {
1146
- return "best-practices";
1147
- }
1148
- case 3: {
1149
- return "opinionated";
1150
- }
1151
- case 4: {
1152
- return "experimental";
1153
- }
1154
- default: {
1155
- const unsupported = tier;
1156
- throw new Error(`Unsupported lint tier ${unsupported}`);
1157
- }
1158
- }
1159
- }
1160
-
1161
- // src/tiers/tier-builder.ts
1162
- function mergeTierConfigs(...parts) {
1163
- return parts.flat();
1164
- }
1165
- function structuralTier0(isTypeChecked) {
1166
- return mergeTierConfigs(
1167
- markdownConfig,
1168
- correctnessCoreConfig,
1169
- isTypeChecked ? typescriptTypeCheckedCorrectnessConfig : typescriptCorrectnessConfig
1170
- );
1171
- }
1172
- function structuralTier1(isTypeChecked) {
1173
- return mergeTierConfigs(
1174
- structuralTier0(isTypeChecked),
1175
- [consistencyRulesConfig],
1176
- isTypeChecked ? typescriptTypeCheckedConsistencyConfig : typescriptConsistencyConfig,
1177
- [typescriptDelegationConfig]
1178
- );
1179
- }
1180
- function structuralTier2(isTypeChecked) {
1181
- return mergeTierConfigs(
1182
- structuralTier1(isTypeChecked),
1183
- bestPracticesCoreConfig,
1184
- importConfig,
1185
- [workspacesConfig]
1186
- );
1187
- }
1188
- function structuralLayersForTier(tier, isTypeChecked) {
1189
- switch (tier) {
1190
- case 0: {
1191
- return structuralTier0(isTypeChecked);
1192
- }
1193
- case 1: {
1194
- return structuralTier1(isTypeChecked);
1195
- }
1196
- case 2:
1197
- case 3:
1198
- case 4: {
1199
- return structuralTier2(isTypeChecked);
1200
- }
1201
- default: {
1202
- const unsupported = tier;
1203
- throw new Error(`Unsupported lint tier ${unsupported}`);
1204
- }
1205
- }
1206
- }
1207
- function appendTypeCheckGate(configs, isTypeChecked) {
1208
- if (isTypeChecked) {
1209
- return configs;
1210
- }
1211
- return [...configs, buildTypeCheckGateLayer()];
1212
- }
1213
- function opinionatedLayersForTier(tier) {
1214
- if (tier < 3) {
1215
- return [];
1216
- }
1217
- const layers = [
1218
- opinionatedUnicornPresetLayerConfigForTier(tier),
1219
- opinionatedUnicornV66LayerConfig
1220
- ];
1221
- if (tier >= 4) {
1222
- layers.push(experimentalUnicornLayerConfig, experimentalUnicornV69LayerConfig);
1223
- }
1224
- return layers;
1225
- }
1226
- var globalIgnoresConfig = { ignores };
1227
- function buildTierConfig(tier, isTypeChecked) {
1228
- const configs = mergeTierConfigs(
1229
- [globalIgnoresConfig],
1230
- structuralLayersForTier(tier, isTypeChecked),
1231
- opinionatedLayersForTier(tier),
1232
- [buildManagedRulesLayer(tier, isTypeChecked)]
1233
- );
1234
- return appendTypeCheckGate(configs, isTypeChecked);
1235
- }
1236
-
1237
- // src/tiers/recommendedConfig.ts
1238
- var DEFAULT_RECOMMENDED_CONFIG_OPTIONS = {
1239
- isTypeChecked: true,
1240
- tier: 3
1241
- };
1242
- var composedConfigModules = [
1243
- "bestPracticesCoreConfig",
1244
- "consistencyRulesConfig",
1245
- "correctnessCoreConfig",
1246
- "importConfig",
1247
- "rulesConfig",
1248
- "typescriptConfig",
1249
- "typescriptConsistencyConfig",
1250
- "typescriptCorrectnessConfig",
1251
- "typescriptTypeCheckedConfig",
1252
- "typescriptTypeCheckedConsistencyConfig",
1253
- "typescriptTypeCheckedCorrectnessConfig",
1254
- "unicornConfig",
1255
- "workspacesConfig"
1256
- ];
1257
- function resolveRecommendedConfigOptions(options) {
1258
- return {
1259
- isTypeChecked: options?.isTypeChecked ?? DEFAULT_RECOMMENDED_CONFIG_OPTIONS.isTypeChecked,
1260
- tier: options?.tier ?? DEFAULT_RECOMMENDED_CONFIG_OPTIONS.tier
1261
- };
1262
- }
1263
- function recommendedConfig(options) {
1264
- const resolved = resolveRecommendedConfigOptions(options);
1265
- return buildTierConfig(resolved.tier, resolved.isTypeChecked);
1266
- }
1267
- function formatRecommendedConfigCall(options) {
1268
- const resolved = resolveRecommendedConfigOptions(options);
1269
- return `recommendedConfig({ tier: ${resolved.tier}, isTypeChecked: ${String(resolved.isTypeChecked)} })`;
1270
- }
1271
- function hasComposedConfigModules(source) {
1272
- return composedConfigModules.some((module) => source.includes(module));
1273
- }
1274
- function parseRecommendedConfigOptionsLiteral(literal) {
1275
- const resolved = { ...DEFAULT_RECOMMENDED_CONFIG_OPTIONS };
1276
- if (literal === void 0 || literal.trim().length === 0) return resolved;
1277
- const tierMatch = /tier:\s*([0-4])\b/.exec(literal);
1278
- if (tierMatch !== null) {
1279
- resolved.tier = Number(tierMatch[1]);
1280
- }
1281
- const isTypeCheckedMatch = /isTypeChecked:\s*(true|false)\b/.exec(literal);
1282
- if (isTypeCheckedMatch === null) {
1283
- const legacyTypeCheckedMatch = /typeChecked:\s*(true|false)\b/.exec(literal);
1284
- if (legacyTypeCheckedMatch !== null) {
1285
- resolved.isTypeChecked = legacyTypeCheckedMatch[1] === "true";
1286
- }
1287
- } else {
1288
- resolved.isTypeChecked = isTypeCheckedMatch[1] === "true";
1289
- }
1290
- return resolved;
1291
- }
1292
- function parseRecommendedConfigSource(source) {
1293
- const callPattern = /recommendedConfig\s*\(\s*(?:\{([^}]*)\})?\s*\)/g;
1294
- const match = callPattern.exec(source);
1295
- if (match === null) return void 0;
1296
- const options = parseRecommendedConfigOptionsLiteral(match[1]);
1297
- const configKind = hasComposedConfigModules(source) ? "custom" : "preset";
1298
- return { configKind, options };
1299
- }
1300
- function applyRecommendedConfigTypeChecked(source, isEnabled) {
1301
- const callPattern = /recommendedConfig\s*\(\s*(?:\{([^}]*)\})?\s*\)/g;
1302
- return source.replaceAll(callPattern, (_match, literal) => {
1303
- const options = parseRecommendedConfigOptionsLiteral(literal);
1304
- options.isTypeChecked = isEnabled;
1305
- return formatRecommendedConfigCall(options);
1306
- });
1307
- }
1308
-
1309
- // src/tiers/index.ts
1310
- var configTier0Correctness = recommendedConfig({ tier: 0, isTypeChecked: false });
1311
- var configTier0CorrectnessTypeChecked = recommendedConfig({ tier: 0, isTypeChecked: true });
1312
- var configTier1Consistency = recommendedConfig({ tier: 1, isTypeChecked: false });
1313
- var configTier1ConsistencyTypeChecked = recommendedConfig({ tier: 1, isTypeChecked: true });
1314
- var configTier2BestPractices = recommendedConfig({ tier: 2, isTypeChecked: false });
1315
- var configTier2BestPracticesTypeChecked = recommendedConfig({ tier: 2, isTypeChecked: true });
1316
- var configTier3Opinionated = recommendedConfig({ tier: 3, isTypeChecked: false });
1317
- var configTier3OpinionatedTypeChecked = recommendedConfig({ tier: 3, isTypeChecked: true });
1318
- var configTier4Experimental = recommendedConfig({ tier: 4, isTypeChecked: false });
1319
- var configTier4ExperimentalTypeChecked = recommendedConfig({ tier: 4, isTypeChecked: true });
1320
- var recommendedTypeCheckedConfig = recommendedConfig({ tier: 2, isTypeChecked: true });
1321
- var config = recommendedConfig({ tier: 2, isTypeChecked: true });
1322
-
1323
- // src/tiers/plugin-rules.ts
1324
- import js2 from "@eslint/js";
1325
- import json2 from "@eslint/json";
1326
- import markdown2 from "@eslint/markdown";
1327
- import esStylistic2 from "@stylistic/eslint-plugin";
1328
- import tsPlugin3 from "@typescript-eslint/eslint-plugin";
1329
- import importPlugin2 from "eslint-plugin-import-x";
1330
- import simpleImportSort2 from "eslint-plugin-simple-import-sort";
1331
- import unicornPlugin2 from "eslint-plugin-unicorn";
1332
- import workspacesPlugin2 from "eslint-plugin-workspaces";
1333
- var compareStrings2 = (left, right) => left.localeCompare(right);
1334
- function sortedRuleNames(rules) {
1335
- if (!rules) {
1336
- return [];
1337
- }
1338
- return Object.keys(rules).toSorted(compareStrings2);
1339
- }
1340
- function sortedRuleNamesFromConfigs(configs) {
1341
- if (!configs) {
1342
- return [];
1343
- }
1344
- const merged = {};
1345
- for (const entry of configs) {
1346
- if (entry.rules) {
1347
- Object.assign(merged, entry.rules);
1348
- }
1349
- }
1350
- return sortedRuleNames(merged);
1351
- }
1352
- function pluginRuleNames(plugin) {
1353
- if (!plugin.rules) {
1354
- return [];
1355
- }
1356
- const prefix = typeof plugin.meta?.name === "string" ? plugin.meta.name.replace(/^eslint-plugin-/, "").replace(/^@eslint\//, "") : "unknown";
1357
- return Object.keys(plugin.rules).toSorted(compareStrings2).map((ruleName) => `${prefix}/${ruleName}`);
1358
- }
1359
- function collectPluginRuleSnapshots() {
1360
- const unicornRecommended = unicornPlugin2.configs["flat/recommended"];
1361
- const importRecommended = importPlugin2.flatConfigs.recommended;
1362
- const flatConfigs2 = tsPlugin3.configs;
1363
- const workspacesRecommended = workspacesPlugin2.configs.recommended;
1364
- return [
1365
- {
1366
- plugin: "@eslint/js",
1367
- rules: sortedRuleNames(js2.configs.recommended.rules),
1368
- source: "configs.recommended"
1369
- },
1370
- {
1371
- plugin: "@eslint/json",
1372
- rules: pluginRuleNames(json2),
1373
- source: "plugin.rules"
1374
- },
1375
- {
1376
- plugin: "@eslint/markdown",
1377
- rules: sortedRuleNames(
1378
- markdown2.configs.recommended[0]?.rules
1379
- ),
1380
- source: "configs.recommended"
1381
- },
1382
- {
1383
- plugin: "@stylistic/eslint-plugin",
1384
- rules: sortedRuleNames(esStylistic2.configs.recommended.rules),
1385
- source: "configs.recommended"
1386
- },
1387
- {
1388
- plugin: "@typescript-eslint/eslint-plugin",
1389
- rules: sortedRuleNamesFromConfigs(flatConfigs2["flat/recommended"]),
1390
- source: "configs.flat/recommended"
1391
- },
1392
- {
1393
- plugin: "@typescript-eslint/eslint-plugin",
1394
- rules: sortedRuleNamesFromConfigs(flatConfigs2["flat/stylistic"]),
1395
- source: "configs.flat/stylistic"
1396
- },
1397
- {
1398
- plugin: "@typescript-eslint/eslint-plugin",
1399
- rules: sortedRuleNamesFromConfigs(flatConfigs2["flat/recommended-type-checked"]),
1400
- source: "configs.flat/recommended-type-checked"
1401
- },
1402
- {
1403
- plugin: "@typescript-eslint/eslint-plugin",
1404
- rules: sortedRuleNamesFromConfigs(flatConfigs2["flat/stylistic-type-checked"]),
1405
- source: "configs.flat/stylistic-type-checked"
1406
- },
1407
- {
1408
- plugin: "eslint-plugin-import-x",
1409
- rules: sortedRuleNames(importRecommended.rules),
1410
- source: "flatConfigs.recommended"
1411
- },
1412
- {
1413
- plugin: "eslint-plugin-import-x",
1414
- rules: sortedRuleNames(importPlugin2.flatConfigs.typescript.rules),
1415
- source: "flatConfigs.typescript"
1416
- },
1417
- {
1418
- plugin: "eslint-plugin-simple-import-sort",
1419
- rules: pluginRuleNames(simpleImportSort2),
1420
- source: "plugin.rules"
1421
- },
1422
- {
1423
- plugin: "eslint-plugin-unicorn",
1424
- rules: sortedRuleNames(unicornRecommended?.rules),
1425
- source: "configs.flat/recommended"
1426
- },
1427
- {
1428
- plugin: "eslint-plugin-workspaces",
1429
- rules: sortedRuleNames(workspacesRecommended.rules),
1430
- source: "configs.recommended"
1431
- }
1432
- ];
1433
- }
1434
- function serializePluginRuleSnapshots(snapshots) {
1435
- return `${JSON.stringify(snapshots, null, 2)}
1436
- `;
1437
- }
1438
-
1439
1
  // src/index.ts
1440
- var docsConfig = [
1441
- ...markdownConfig,
1442
- jsonConfig,
1443
- jsoncConfig,
1444
- json5Config
1445
- ];
1446
- export {
1447
- DEFAULT_RECOMMENDED_CONFIG_OPTIONS,
1448
- MANAGED_RULES as RULE_CATALOG,
1449
- RULE_OWNERSHIP_GROUPS,
1450
- applyRecommendedConfigTypeChecked,
1451
- assertNoRuleOwnershipConflicts,
1452
- bestPracticesCoreConfig,
1453
- buildManagedRulesLayer,
1454
- buildTierConfig,
1455
- buildTypeCheckGateLayer,
1456
- categoryForTier,
1457
- collectPluginRuleSnapshots,
1458
- collectTypeCheckedRuleNames,
1459
- config,
1460
- configTier0Correctness,
1461
- configTier0CorrectnessTypeChecked,
1462
- configTier1Consistency,
1463
- configTier1ConsistencyTypeChecked,
1464
- configTier2BestPractices,
1465
- configTier2BestPracticesTypeChecked,
1466
- configTier3Opinionated,
1467
- configTier3OpinionatedTypeChecked,
1468
- configTier4Experimental,
1469
- configTier4ExperimentalTypeChecked,
1470
- consistencyRulesConfig,
1471
- coreConfig,
1472
- correctnessCoreConfig,
1473
- correctnessRulesConfig,
1474
- docsConfig,
1475
- experimentalLayerConfig,
1476
- experimentalPromotionRules,
1477
- experimentalUnicornLayerConfig,
1478
- experimentalUnicornV69LayerConfig,
1479
- findEnabledTypeCheckedRules,
1480
- findRuleOwnershipConflicts,
1481
- formatRecommendedConfigCall,
1482
- getRuleSeverity,
1483
- globalIgnoresConfig,
1484
- ignores,
1485
- importConfig,
1486
- json5Config,
1487
- jsonConfig,
1488
- jsoncConfig,
1489
- managedRulesForTier,
1490
- markdownConfig,
1491
- mergeConfigRules,
1492
- opinionatedLayerConfig,
1493
- opinionatedPromotionLayerConfig,
1494
- opinionatedPromotionRules,
1495
- opinionatedUnicornPresetLayerConfig,
1496
- opinionatedUnicornV66LayerConfig,
1497
- parseRecommendedConfigSource,
1498
- recommendedConfig,
1499
- recommendedTypeCheckedConfig,
1500
- resolveRecommendedConfigOptions,
1501
- rulesConfig,
1502
- serializePluginRuleSnapshots,
1503
- srcImportsConfig,
1504
- strictLayerConfig,
1505
- strictPromotionRules,
1506
- typescriptConfig,
1507
- typescriptConsistencyConfig,
1508
- typescriptCorrectnessConfig,
1509
- typescriptDelegationConfig,
1510
- typescriptTypeCheckedConfig,
1511
- typescriptTypeCheckedConsistencyConfig,
1512
- typescriptTypeCheckedCorrectnessConfig,
1513
- unicornConfig,
1514
- unicornExperimentalMigrationQueue,
1515
- unicornGloballyDisabledRules,
1516
- unicornOpinionatedRules,
1517
- unicornOpinionatedRulesForTier,
1518
- unicornV66MigrationQueue,
1519
- unicornV66NewRules,
1520
- unicornV67MigrationQueue,
1521
- unicornV69MigrationQueue,
1522
- workspacesConfig
1523
- };
2
+ export * from "@ariestools/eslint-config-flat";
1524
3
  //# sourceMappingURL=index.mjs.map