@seanblonien/eslint-config-base 1.0.10 → 1.0.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.
package/dist/index.js CHANGED
@@ -63,6 +63,7 @@ var booleanNameExceptionsList = [
63
63
  "^allow",
64
64
  "^visible",
65
65
  "^merge$",
66
+ "^ssr$",
66
67
  "^multiSelect$",
67
68
  "Shown$",
68
69
  "^enumerable$",
@@ -77,16 +78,14 @@ var booleanNameConvention = new RegExp(
77
78
 
78
79
  // src/index.ts
79
80
  var config = [
80
- // Base recommended rules from ESLint
81
+ // Base configurations
81
82
  eslint.configs.recommended,
82
- // TypeScript recommended configs
83
83
  ...tseslint.configs.recommendedTypeChecked,
84
84
  ...tseslint.configs.stylisticTypeChecked,
85
85
  ...tseslint.configs.strict,
86
- // Apply stylistic rules with customized settings
86
+ // Plugin configurations
87
87
  stylistic.configs.customize({
88
88
  arrowParens: true,
89
- // jsx: true,
90
89
  braceStyle: "1tbs",
91
90
  commaDangle: "always-multiline",
92
91
  indent: 2,
@@ -94,15 +93,13 @@ var config = [
94
93
  quotes: "single",
95
94
  semi: true
96
95
  }),
97
- // Import plugin configuration
98
96
  importXPlugin.flatConfigs.recommended,
99
97
  importXPlugin.flatConfigs.typescript,
100
98
  sortPlugin.configs["flat/recommended"],
101
- // Code quality plugins
102
99
  unicornPlugin.configs.recommended,
103
100
  comments.recommended,
104
101
  sonarjsPlugin.configs.recommended,
105
- // General JavaScript/TypeScript configuration
102
+ // Main configuration
106
103
  {
107
104
  files: ["**/*.{js,mjs,cjs,ts,tsx}"],
108
105
  languageOptions: {
@@ -129,44 +126,99 @@ var config = [
129
126
  "unused-imports": unusedImports
130
127
  },
131
128
  rules: {
132
- // --- Stylistic Rules ---
133
- // Core rules turned off in favor of stylistic rules
129
+ // === DISABLED CORE RULES (replaced by plugins) ===
130
+ // These core ESLint rules are disabled because we use enhanced versions from plugins:
134
131
  "quotes": "off",
132
+ // Replaced by @stylistic/quotes with better formatting options and JSX support
135
133
  "jsx-quotes": "off",
134
+ // Replaced by @stylistic/jsx-quotes for JSX-specific quote handling
136
135
  "func-call-spacing": "off",
136
+ // Replaced by @stylistic/function-call-spacing for consistent spacing
137
137
  "dot-notation": "off",
138
+ // Replaced by @typescript-eslint/dot-notation with TypeScript awareness
138
139
  "no-unused-expressions": "off",
140
+ // Replaced by @typescript-eslint/no-unused-expressions with better TS support
139
141
  "no-use-before-define": "off",
142
+ // Replaced by @typescript-eslint/no-use-before-define for TypeScript hoisting rules
140
143
  "default-param-last": "off",
144
+ // Replaced by @typescript-eslint/default-param-last with TS parameter awareness
141
145
  "no-redeclare": "off",
146
+ // Replaced by @typescript-eslint/no-redeclare for better type checking
142
147
  "no-shadow": "off",
143
- // Stylistic (overrides vs stylistic recommended)
144
- "quote-props": ["warn", "consistent-as-needed"],
148
+ // Replaced by @typescript-eslint/no-shadow for TypeScript variable shadowing
149
+ "spaced-comment": "off",
150
+ // Replaced by @stylistic/spaced-comment with more formatting options
151
+ "no-unused-vars": "off",
152
+ // Replaced by @typescript-eslint/no-unused-vars and unused-imports plugin
153
+ "@stylistic/no-unused-vars": "off",
154
+ // Replaced by unused-imports/no-unused-vars for better import handling
155
+ "sonarjs/no-unused-vars": "off",
156
+ // Replaced by unused-imports/no-unused-vars to avoid conflicts
157
+ "no-magic-numbers": "off",
158
+ // Replaced by @typescript-eslint/no-magic-numbers with TypeScript-aware exceptions
159
+ // === DISABLED PLUGIN RULES (intentionally turned off) ===
160
+ // Sort plugin rules (replaced by import-x/order):
161
+ "sort/imports": "off",
162
+ // Replaced by import-x/order which has better TypeScript support
163
+ "sort/object-properties": "off",
164
+ // Object property sorting is not required
165
+ "sort/string-unions": "off",
166
+ // String union sorting is not required
167
+ // Unicorn rules that are too restrictive or don't match our style:
168
+ "unicorn/prefer-global-this": "off",
169
+ // GlobalThis is not always preferred over window/global
170
+ "unicorn/prevent-abbreviations": "off",
171
+ // Common abbreviations (props, args, etc.) are acceptable
172
+ "unicorn/no-array-reduce": "off",
173
+ // Array.reduce is a valid and useful method
174
+ "unicorn/no-array-for-each": "off",
175
+ // Array.forEach is preferred over for...of in many cases
176
+ "unicorn/prefer-top-level-await": "off",
177
+ // Top-level await is not always appropriate
178
+ "unicorn/no-array-callback-reference": "off",
179
+ // Method references as callbacks are acceptable
180
+ "unicorn/prefer-switch": "off",
181
+ // Switch statements are banned (see no-restricted-syntax below)
182
+ "unicorn/prefer-object-from-entries": "off",
183
+ // Object.fromEntries is not always better
184
+ "unicorn/no-null": "off",
185
+ // Null is still a valid value in many contexts
186
+ // SonarJS rules that are disabled for various reasons:
187
+ "sonarjs/cognitive-complexity": "off",
188
+ // Replaced by core complexity rule which is simpler
189
+ "sonarjs/no-nested-functions": "off",
190
+ // Replaced by complexity rule, nested functions are sometimes needed
191
+ "sonarjs/function-return-type": "off",
192
+ // TypeScript handles return type checking better
193
+ "sonarjs/no-redundant-optional": "off",
194
+ // TypeScript handles optional types better
195
+ "sonarjs/no-commented-code": "off",
196
+ // Performance-intensive rule, commented code is sometimes useful
197
+ "sonarjs/todo-tag": "off",
198
+ // TODO comments are acceptable during development
199
+ "sonarjs/pseudo-random": "off",
200
+ // Math.random() is acceptable for non-cryptographic uses
201
+ "sonarjs/void-use": "off",
202
+ // Allow void operators for type assertions and async function annotations
203
+ "sonarjs/no-nested-conditional": "off",
204
+ // Replaced by no-nested-ternary rule
205
+ "sonarjs/no-hardcoded-passwords": "off",
206
+ // Import and testing rules:
207
+ "import-x/no-named-as-default-member": "off",
208
+ // Named default exports are sometimes necessary
209
+ // === STYLISTIC & FORMATTING ===
145
210
  "@stylistic/quotes": ["warn", "single", { avoidEscape: true }],
146
211
  "@stylistic/jsx-quotes": ["warn", "prefer-single"],
147
- "@stylistic/jsx-one-expression-per-line": "off",
148
212
  "@stylistic/block-spacing": ["warn", "never"],
149
213
  "@stylistic/object-curly-newline": [
150
214
  "warn",
151
215
  { ObjectPattern: { multiline: true, consistent: true } }
152
216
  ],
153
- "object-property-newline": [
154
- "warn",
155
- { allowAllPropertiesOnSameLine: true }
156
- ],
157
- "function-call-argument-newline": ["warn", "consistent"],
158
- "no-multiple-empty-lines": ["warn", { max: 1, maxEOF: 1 }],
159
- "no-multi-spaces": "warn",
160
- "no-useless-rename": "warn",
161
- "arrow-spacing": "warn",
162
- "space-infix-ops": "warn",
163
217
  "@stylistic/operator-linebreak": [
164
218
  "warn",
165
219
  "after",
166
220
  { overrides: { "?": "before", ":": "before" } }
167
221
  ],
168
- "comma-style": ["warn", "last"],
169
- "complexity": ["warn", { max: 20 }],
170
222
  "@stylistic/max-len": [
171
223
  "warn",
172
224
  {
@@ -180,16 +232,6 @@ var config = [
180
232
  ignoreRegExpLiterals: true
181
233
  }
182
234
  ],
183
- "no-extra-parens": [
184
- "error",
185
- "all",
186
- {
187
- ignoreJSX: "all",
188
- // don’t complain about JSX parens
189
- enforceForArrowConditionals: false,
190
- nestedBinaryExpressions: false
191
- }
192
- ],
193
235
  "@stylistic/jsx-wrap-multilines": [
194
236
  "error",
195
237
  {
@@ -201,47 +243,156 @@ var config = [
201
243
  logical: "parens-new-line"
202
244
  }
203
245
  ],
246
+ "@stylistic/brace-style": ["warn", "1tbs", { allowSingleLine: true }],
247
+ "@stylistic/comma-dangle": ["warn", "always-multiline"],
248
+ "@stylistic/comma-spacing": "warn",
249
+ "@stylistic/function-call-spacing": ["error"],
250
+ "@stylistic/array-element-newline": ["warn", { multiline: true, consistent: true }],
251
+ "@stylistic/array-bracket-newline": ["warn", "consistent"],
252
+ "@stylistic/no-mixed-operators": ["warn", { allowSamePrecedence: true }],
253
+ "@stylistic/rest-spread-spacing": ["warn", "never"],
254
+ "@stylistic/spaced-comment": ["warn", "always", { line: { markers: ["!", "?", "-", "**"] } }],
255
+ "@stylistic/jsx-one-expression-per-line": "warn",
256
+ // === CODE QUALITY & STRUCTURE ===
257
+ // Complexity and size limits:
258
+ "complexity": ["warn", { max: 20 }],
259
+ // Warn when cyclomatic complexity exceeds 20
204
260
  "max-lines-per-function": ["error", 120],
205
- "max-lines": ["error", { max: 900, skipBlankLines: true }],
261
+ // Error when functions exceed 120 lines
262
+ "max-lines": ["error", { max: 600, skipBlankLines: true }],
263
+ // Error when files exceed 900 lines
264
+ // Code style preferences:
206
265
  "func-style": ["warn", "expression"],
266
+ // Prefer function expressions over declarations
267
+ "object-shorthand": ["warn", "always"],
268
+ // Use object shorthand ({ name } instead of { name: name })
269
+ "arrow-body-style": ["warn", "as-needed"],
270
+ // Use concise arrow functions when possible
271
+ "prefer-destructuring": "warn",
272
+ // Prefer destructuring for object/array access
273
+ "prefer-arrow-callback": "error",
274
+ // Prefer arrow functions for callbacks
275
+ "prefer-template": "warn",
276
+ // Use template literals instead of string concatenation
277
+ "one-var": ["error", "never"],
278
+ // Declare each variable separately
279
+ "no-bitwise": "error",
280
+ // Disallow bitwise operators (often used for obfuscation)
281
+ // Parentheses and expression clarity:
282
+ "no-extra-parens": [
283
+ "error",
284
+ "all",
285
+ {
286
+ ignoreJSX: "all",
287
+ // JSX requires parentheses for multi-line expressions
288
+ enforceForArrowConditionals: false,
289
+ // Allow parentheses in arrow conditionals
290
+ nestedBinaryExpressions: false
291
+ // Allow parentheses for clarity in nested expressions
292
+ }
293
+ ],
294
+ // === SECURITY & BEST PRACTICES ===
295
+ // Prevent dangerous code execution patterns:
296
+ "no-eval": "error",
297
+ // Disallows eval() which can execute arbitrary code
298
+ "no-implied-eval": "error",
299
+ // Catches indirect eval usage (setTimeout with string, etc.)
300
+ "no-new-func": "error",
301
+ // Prevents Function constructor which is similar to eval
302
+ "no-script-url": "error",
303
+ // Disallows javascript: URLs which are XSS vectors
304
+ // Error handling and promises:
305
+ "prefer-promise-reject-errors": "error",
306
+ // Ensures promises are rejected with Error objects
307
+ "no-throw-literal": "error",
308
+ // Prevents throwing non-Error objects (strings, numbers, etc.)
309
+ // Code quality and safety:
310
+ "no-unreachable-loop": "error",
311
+ // Catches loops with unreachable iterations
312
+ "no-unsafe-negation": "error",
313
+ // Prevents unsafe negation patterns that can cause bugs
314
+ "yoda": "error",
315
+ // Enforces consistent comparison order (variable == constant, not constant == variable)
316
+ // Promise constructor safety:
317
+ "no-promise-executor-return": "error",
318
+ // Prevents returning values from promise executor
319
+ "no-async-promise-executor": "error",
320
+ // Prevents async promise constructors (anti-pattern)
321
+ // === GENERAL JAVASCRIPT RULES ===
322
+ "quote-props": ["warn", "consistent-as-needed"],
323
+ "object-property-newline": ["warn", { allowAllPropertiesOnSameLine: true }],
324
+ "function-call-argument-newline": ["warn", "consistent"],
325
+ "no-multiple-empty-lines": ["warn", { max: 1, maxEOF: 1 }],
326
+ "no-multi-spaces": "warn",
327
+ "no-useless-rename": "warn",
328
+ "arrow-spacing": "warn",
329
+ "space-infix-ops": "warn",
330
+ "comma-style": ["warn", "last"],
331
+ "no-nested-ternary": "warn",
332
+ "no-unneeded-ternary": "warn",
333
+ "no-else-return": "error",
334
+ "no-console": "warn",
335
+ "no-useless-concat": "warn",
336
+ "no-new": "error",
337
+ "no-extra-semi": "error",
338
+ "no-implicit-coercion": ["warn", { allow: ["!!"] }],
339
+ "no-extra-boolean-cast": "warn",
207
340
  "padding-line-between-statements": [
208
341
  "error",
209
342
  {
210
- // Require a blank line after directive prologues ("use client", "use strict", etc.)
211
343
  blankLine: "always",
212
344
  prev: "directive",
213
345
  next: "*"
214
346
  },
215
347
  {
216
- // But we *don't* want to require blank lines between multiple directives
217
- // (so `"use client";` can be followed immediately by `"use strict";`)
218
348
  blankLine: "any",
219
349
  prev: "directive",
220
350
  next: "directive"
221
351
  },
222
352
  {
223
- // No blank line between import and import statements
224
353
  blankLine: "never",
225
354
  prev: "import",
226
355
  next: "import"
227
356
  }
228
357
  ],
229
- "object-shorthand": ["warn", "always"],
230
- "arrow-body-style": ["warn", "as-needed"],
231
- "prefer-destructuring": "warn",
232
- "prefer-arrow-callback": "error",
233
- "prefer-template": "warn",
234
- "one-var": ["error", "never"],
235
- "no-bitwise": "error",
236
- // TypeScript equivalents and customizations
358
+ // === TYPESCRIPT RULES ===
359
+ // Type safety & preferences
360
+ "@typescript-eslint/no-explicit-any": ["warn", { fixToUnknown: true }],
361
+ "@typescript-eslint/no-inferrable-types": ["warn", { ignoreParameters: true }],
362
+ "@typescript-eslint/prefer-nullish-coalescing": [
363
+ "warn",
364
+ { ignorePrimitives: { string: true } }
365
+ ],
366
+ "@typescript-eslint/no-non-null-asserted-nullish-coalescing": "error",
367
+ "@typescript-eslint/no-non-null-asserted-optional-chain": "error",
368
+ "@typescript-eslint/no-extra-non-null-assertion": "error",
369
+ "@typescript-eslint/no-confusing-non-null-assertion": "error",
370
+ "@typescript-eslint/ban-ts-comment": [
371
+ "error",
372
+ { "ts-expect-error": "allow-with-description", "ts-ignore": "allow-with-description" }
373
+ ],
374
+ "@typescript-eslint/no-empty-object-type": "warn",
375
+ "@typescript-eslint/no-unsafe-function-type": "warn",
376
+ "@typescript-eslint/no-wrapper-object-types": "warn",
377
+ "@typescript-eslint/array-type": ["warn", { default: "array" }],
378
+ "@typescript-eslint/no-unnecessary-condition": "warn",
379
+ "@typescript-eslint/no-unnecessary-boolean-literal-compare": "warn",
380
+ "@typescript-eslint/no-floating-promises": "error",
381
+ "@typescript-eslint/await-thenable": "error",
382
+ "@typescript-eslint/prefer-readonly": "warn",
383
+ "@typescript-eslint/no-invalid-void-type": "error",
384
+ // Void types are valid in many contexts (e.g., Promise<void>)
385
+ "@typescript-eslint/no-misused-promises": "error",
386
+ // Too many false positives with promise handling
387
+ // TypeScript consistency
388
+ "@typescript-eslint/consistent-indexed-object-style": ["error", "record"],
389
+ "@typescript-eslint/consistent-type-assertions": ["error", { assertionStyle: "as" }],
390
+ "@typescript-eslint/consistent-type-definitions": ["error", "type"],
391
+ "@typescript-eslint/consistent-type-exports": "error",
392
+ "@typescript-eslint/method-signature-style": "error",
393
+ // TypeScript equivalents of core rules
237
394
  "@typescript-eslint/no-redeclare": "error",
238
395
  "@typescript-eslint/default-param-last": "error",
239
- "@typescript-eslint/require-await": "off",
240
- "no-return-await": "warn",
241
- "no-nested-ternary": "warn",
242
- "no-unneeded-ternary": "warn",
243
- "no-else-return": "warn",
244
- "no-constant-condition": "off",
245
396
  "@typescript-eslint/dot-notation": "error",
246
397
  "@typescript-eslint/no-unused-expressions": [
247
398
  "error",
@@ -255,14 +406,7 @@ var config = [
255
406
  "error",
256
407
  { variables: true, functions: false }
257
408
  ],
258
- "no-console": "warn",
259
- "no-useless-concat": "warn",
260
- "no-new": "error",
261
- "no-extra-semi": "error",
262
- "no-implicit-coercion": ["warn", { allow: ["!!"] }],
263
- "no-extra-boolean-cast": "warn",
264
- // Magic numbers
265
- "no-magic-numbers": "off",
409
+ "@typescript-eslint/no-shadow": "error",
266
410
  "@typescript-eslint/no-magic-numbers": [
267
411
  "error",
268
412
  {
@@ -273,44 +417,44 @@ var config = [
273
417
  ignore: [0, 1, -1, 2]
274
418
  }
275
419
  ],
276
- // More stylistic specifics
277
- "@stylistic/brace-style": ["warn", "1tbs", { allowSingleLine: true }],
278
- "@stylistic/comma-dangle": ["warn", "always-multiline"],
279
- "@stylistic/comma-spacing": "warn",
280
- "@stylistic/function-call-spacing": ["error"],
281
- // Naming
420
+ // Expressions and async
421
+ "@typescript-eslint/no-confusing-void-expression": [
422
+ "error",
423
+ { ignoreArrowShorthand: true }
424
+ ],
425
+ "@typescript-eslint/no-meaningless-void-operator": "error",
426
+ // TypeScript modern preferences
427
+ "@typescript-eslint/prefer-includes": "error",
428
+ "@typescript-eslint/prefer-optional-chain": "error",
429
+ "@typescript-eslint/prefer-reduce-type-parameter": "error",
430
+ "@typescript-eslint/prefer-string-starts-ends-with": "error",
431
+ // === NAMING CONVENTIONS ===
282
432
  "camelcase": ["warn", { allow: ["^_", "content_type", "reply_to"] }],
283
433
  "@typescript-eslint/naming-convention": [
284
434
  "warn",
285
- // Property naming rules
286
435
  {
287
436
  selector: "property",
288
437
  format: ["camelCase", "UPPER_CASE"],
289
438
  leadingUnderscore: "allow",
290
439
  filter: {
291
440
  regex: String.raw`^_|[- /?:{}@%]|Provider|Comp|^item$|^condition$|^container$|^Container$|^\d+$`,
292
- // ignore properties with dashes/slashes/spaces
293
441
  match: false
294
442
  }
295
443
  },
296
- // Variable-like naming rules
297
444
  {
298
445
  selector: "variableLike",
299
446
  format: ["camelCase", "UPPER_CASE", "PascalCase"],
300
447
  trailingUnderscore: "allow"
301
448
  },
302
- // Function variable naming rules
303
449
  {
304
450
  selector: "variable",
305
451
  format: ["camelCase", "PascalCase"],
306
452
  types: ["function"],
307
453
  filter: {
308
454
  regex: "^_|Comp|Provider|Stack|Wrapper|Root",
309
- // allowing for 'Component' parameter names
310
455
  match: false
311
456
  }
312
457
  },
313
- // Type naming rules
314
458
  {
315
459
  selector: "typeLike",
316
460
  format: ["PascalCase"],
@@ -319,12 +463,10 @@ var config = [
319
463
  match: false
320
464
  }
321
465
  },
322
- // Boolean naming rules
323
466
  {
324
467
  selector: ["variable", "property", "parameter", "typeProperty"],
325
468
  types: ["boolean"],
326
469
  format: ["UPPER_CASE", "PascalCase"],
327
- // must be PascalCase because prefix is trimmed
328
470
  prefix: booleanNamePrefixes,
329
471
  filter: {
330
472
  regex: booleanNameExceptions,
@@ -332,148 +474,86 @@ var config = [
332
474
  }
333
475
  }
334
476
  ],
335
- // TS type safety and preferences
336
- "@typescript-eslint/no-explicit-any": ["warn", { fixToUnknown: true }],
337
- "@typescript-eslint/no-inferrable-types": ["warn", { ignoreParameters: true }],
338
- "@typescript-eslint/no-shadow": "error",
339
- "@typescript-eslint/no-unsafe-enum-comparison": "off",
340
- "@typescript-eslint/no-base-to-string": "off",
341
- "@typescript-eslint/prefer-nullish-coalescing": [
477
+ // === IMPORTS & EXPORTS ===
478
+ // Import path and structure validation:
479
+ "import-x/no-absolute-path": "warn",
480
+ // Prevent absolute paths in imports (should use relative or package imports)
481
+ "import-x/newline-after-import": ["warn", { count: 1 }],
482
+ // Require exactly one blank line after imports
483
+ "import-x/no-cycle": ["error", { maxDepth: 1, ignoreExternal: true }],
484
+ // Prevent circular dependencies
485
+ "import-x/order": [
342
486
  "warn",
343
- { ignorePrimitives: { string: true } }
344
- ],
345
- "@typescript-eslint/no-non-null-asserted-nullish-coalescing": "error",
346
- "@typescript-eslint/no-non-null-asserted-optional-chain": "error",
347
- "@typescript-eslint/no-extra-non-null-assertion": "error",
348
- "@typescript-eslint/no-confusing-non-null-assertion": "error",
349
- "@typescript-eslint/ban-ts-comment": [
350
- "error",
351
- { "ts-expect-error": "allow-with-description", "ts-ignore": "allow-with-description" }
352
- ],
353
- "@typescript-eslint/no-empty-object-type": "warn",
354
- "@typescript-eslint/no-unsafe-function-type": "warn",
355
- "@typescript-eslint/no-wrapper-object-types": "warn",
356
- "@typescript-eslint/array-type": ["warn", { default: "array" }],
357
- "@stylistic/array-element-newline": ["warn", { multiline: true, consistent: true }],
358
- "@stylistic/array-bracket-newline": ["warn", "consistent"],
359
- "@stylistic/no-mixed-operators": ["warn", { allowSamePrecedence: true }],
360
- "@stylistic/rest-spread-spacing": ["warn", "never"],
361
- "@typescript-eslint/no-unnecessary-condition": "warn",
362
- "@typescript-eslint/no-unnecessary-boolean-literal-compare": "warn",
363
- // TS consistency
364
- "@typescript-eslint/consistent-indexed-object-style": ["error", "record"],
365
- "@typescript-eslint/consistent-type-assertions": [
366
- "error",
367
- { assertionStyle: "as" }
368
- ],
369
- "@typescript-eslint/consistent-type-definitions": ["error", "type"],
370
- "@typescript-eslint/consistent-type-exports": "error",
371
- "@typescript-eslint/method-signature-style": "error",
372
- // Expressions and async
373
- "@typescript-eslint/no-confusing-void-expression": [
374
- "error",
375
- { ignoreArrowShorthand: true }
487
+ {
488
+ "groups": [
489
+ "builtin",
490
+ // Node.js built-in modules
491
+ "external",
492
+ // Packages from node_modules
493
+ ["type", "internal"],
494
+ // Type imports, Absolute imports (often aliased like 'src/components')
495
+ "parent",
496
+ // Relative imports from parent directories (../)
497
+ "sibling",
498
+ // Relative imports from sibling directories (./)
499
+ "index",
500
+ // Index file imports (./index.js)
501
+ "object"
502
+ // Imports from object notation
503
+ ],
504
+ "newlines-between": "never"
505
+ }
376
506
  ],
377
- "@typescript-eslint/no-invalid-void-type": "off",
378
- "@typescript-eslint/no-meaningless-void-operator": "error",
379
- "@typescript-eslint/no-misused-promises": "off",
380
- "@typescript-eslint/no-var-requires": "off",
381
- // TS modern prefs
382
- "@typescript-eslint/prefer-includes": "error",
383
- "@typescript-eslint/prefer-optional-chain": "error",
384
- "@typescript-eslint/prefer-reduce-type-parameter": "error",
385
- "@typescript-eslint/prefer-string-starts-ends-with": "error",
386
- // --- Comment Formatting Rules ---
387
- "spaced-comment": "off",
388
- "@stylistic/spaced-comment": ["warn", "always", { line: { markers: ["!", "?", "-", "**"] } }],
389
- // --- Unused Variables & Imports Rules ---
390
- "no-unused-vars": "off",
391
- "@stylistic/no-unused-vars": "off",
392
- "sonarjs/no-unused-vars": "off",
507
+ // === UNUSED IMPORTS & VARIABLES ===
508
+ // Automatically remove unused imports:
393
509
  "unused-imports/no-unused-imports": "error",
510
+ // Error on unused imports (auto-fixable)
511
+ // Handle unused variables with underscore convention:
394
512
  "unused-imports/no-unused-vars": [
395
513
  "warn",
396
514
  {
397
515
  vars: "all",
516
+ // Check all variables
398
517
  varsIgnorePattern: "^_",
518
+ // Ignore variables starting with underscore
399
519
  args: "after-used",
520
+ // Only check arguments after the last used one
400
521
  argsIgnorePattern: "^_"
522
+ // Ignore arguments starting with underscore
401
523
  }
402
524
  ],
403
- // --- Banned API Rules ---
525
+ // === BANNED APIS ===
526
+ // Ban imperative array/object operations in favor of modern syntax:
404
527
  "ban/ban": [
405
528
  "warn",
406
529
  {
407
530
  name: ["*", "concat"],
408
- message: "Imperative operation: prefer use ES6 spread, i.e. [...items, newItem]"
531
+ message: "Array.concat is an imperative operation. Use ES6 spread syntax instead: [...items, newItem]"
409
532
  },
410
533
  {
411
534
  name: ["Object", "assign"],
412
- message: "Use the spread operator `{...obj}` instead"
535
+ message: "Object.assign is imperative. Use the spread operator instead: {...obj}"
413
536
  }
414
537
  ],
415
- // --- Code Structure Restrictions ---
416
- // No loops rule
538
+ // === CODE STRUCTURE RESTRICTIONS ===
539
+ // Enforce functional programming patterns:
417
540
  "no-loops/no-loops": "error",
418
- // Syntax restrictions
541
+ // Ban for/while/do-while loops, use array methods instead
542
+ // Enforce pattern-based conditional logic:
419
543
  "no-restricted-syntax": [
420
544
  "error",
421
545
  {
422
546
  selector: "SwitchStatement",
423
- message: "Switch statements are banned. Use `ts-pattern` instead."
547
+ message: "Switch statements are banned. Use `ts-pattern` library for pattern matching instead."
424
548
  }
425
549
  ],
426
- // --- ESLint Comments Rules ---
550
+ // === ESLINT COMMENTS ===
427
551
  "@eslint-community/eslint-comments/require-description": ["error", { ignore: ["eslint-enable"] }],
428
- // --- Testing Library Rules ---
552
+ // === TESTING LIBRARY ===
429
553
  "testing-library/no-render-in-lifecycle": ["error", { allowTestingFrameworkSetupHook: "beforeEach" }],
430
- "testing-library/no-unnecessary-act": "off",
431
- // --- Import Rules ---
432
- // Commented out rules kept for reference
433
- // 'import/no-default-export': 'warn',
434
- // 'import/no-restricted-paths': ['warn', { zones: restrictedPaths }], // Define restrictedPaths
435
- "import-x/no-named-as-default-member": "off",
436
- "import-x/no-absolute-path": "warn",
437
- "import-x/newline-after-import": ["warn", { count: 1 }],
438
- "import-x/no-cycle": ["error", { maxDepth: 1, ignoreExternal: true }],
439
- "import-x/order": [
440
- "warn",
441
- {
442
- groups: [
443
- "builtin",
444
- // Node.js built-in modules
445
- "external",
446
- // Packages from node_modules
447
- ["type", "internal"],
448
- // Type imports, Absolute imports (often aliased like 'src/components')
449
- "parent",
450
- // Relative imports from parent directories (../)
451
- "sibling",
452
- // Relative imports from sibling directories (./)
453
- "index",
454
- // Index file imports (./index.js)
455
- "object"
456
- // Imports from object notation
457
- ]
458
- }
459
- ],
460
- // --- Sort Rules ---
461
- "sort/imports": "off",
462
- // use 'import-x/order' rule instead
463
- "sort/object-properties": "off",
554
+ // === SORTING ===
464
555
  "sort/type-properties": "warn",
465
- "sort/string-unions": "off",
466
- // --- Unicorn Rules ---
467
- "unicorn/prefer-global-this": "off",
468
- "unicorn/prevent-abbreviations": "off",
469
- "unicorn/no-array-reduce": "off",
470
- "unicorn/no-array-for-each": "off",
471
- "unicorn/prefer-top-level-await": "off",
472
- "unicorn/no-array-callback-reference": "off",
473
- "unicorn/prefer-switch": "off",
474
- "unicorn/no-abusive-eslint-disable": "off",
475
- "unicorn/prefer-object-from-entries": "off",
476
- "unicorn/no-null": "off",
556
+ // === UNICORN ===
477
557
  "unicorn/filename-case": [
478
558
  "warn",
479
559
  {
@@ -485,31 +565,8 @@ var config = [
485
565
  "unicorn/no-unused-properties": "warn",
486
566
  "unicorn/consistent-destructuring": "warn",
487
567
  "unicorn/no-useless-undefined": ["warn", { checkArguments: false }],
488
- // --- SonarJS Rules ---
489
- "sonarjs/no-duplicated-branches": "warn",
490
- "sonarjs/no-duplicate-string": "off",
491
- "sonarjs/deprecation": "off",
492
- "sonarjs/cognitive-complexity": "off",
493
- // use 'complexity' rule instead
494
- "sonarjs/no-nested-functions": "off",
495
- // use 'complexity' rule instead
496
- "sonarjs/function-return-type": "off",
497
- // use '@typescript-eslint/explicit-module-boundary-types' rule instead
498
- "sonarjs/no-redundant-optional": "off",
499
- // use '@typescript-eslint/no-redundant-optional' rule instead
500
- "sonarjs/no-commented-code": "off",
501
- // slow rule
502
- "sonarjs/todo-tag": "off",
503
- // eventually re-enable
504
- "sonarjs/pseudo-random": "off",
505
- "sonarjs/different-types-comparison": "off",
506
- // too many false positives
507
- "sonarjs/redundant-type-aliases": "off",
508
- "sonarjs/void-use": "off",
509
- // allow to annotate async functions not explicitly awaited
510
- "sonarjs/no-nested-conditional": "off",
511
- // use 'no-nested-ternary' rule instead
512
- "sonarjs/no-hardcoded-passwords": "off"
568
+ // === SONARJS ===
569
+ "sonarjs/no-duplicated-branches": "warn"
513
570
  },
514
571
  settings: {
515
572
  "import-x/extensions": [".js", ".cjs", ".mjs"],
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/boolean-naming.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-magic-numbers -- config file */\n/* eslint-disable @typescript-eslint/naming-convention -- config file */\nimport eslint from '@eslint/js';\n// @ts-expect-error - no types available\nimport comments from '@eslint-community/eslint-plugin-eslint-comments/configs';\nimport stylistic from '@stylistic/eslint-plugin';\nimport { createTypeScriptImportResolver } from 'eslint-import-resolver-typescript';\nimport importXPlugin from 'eslint-plugin-import-x';\nimport sonarjsPlugin from 'eslint-plugin-sonarjs';\nimport sortPlugin from 'eslint-plugin-sort';\nimport testingLibraryPlugin from 'eslint-plugin-testing-library';\nimport unicornPlugin from 'eslint-plugin-unicorn';\nimport unusedImports from 'eslint-plugin-unused-imports';\nimport globals from 'globals';\nimport tseslint from 'typescript-eslint';\n// @ts-expect-error - no types available\nimport noLoopsPlugin from 'eslint-plugin-no-loops';\n// @ts-expect-error - no types available\nimport banPlugin from 'eslint-plugin-ban';\nimport type { Linter } from 'eslint';\nimport { booleanNameExceptions, booleanNamePrefixes } from './boolean-naming';\n\ntype Plugin = typeof testingLibraryPlugin;\n\nconst config: Linter.Config[] = [\n // Base recommended rules from ESLint\n eslint.configs.recommended,\n\n // TypeScript recommended configs\n ...tseslint.configs.recommendedTypeChecked,\n ...tseslint.configs.stylisticTypeChecked,\n ...tseslint.configs.strict,\n\n // Apply stylistic rules with customized settings\n stylistic.configs.customize({\n arrowParens: true,\n // jsx: true,\n braceStyle: '1tbs',\n commaDangle: 'always-multiline',\n indent: 2,\n quoteProps: 'consistent-as-needed',\n quotes: 'single',\n semi: true,\n }),\n\n // Import plugin configuration\n importXPlugin.flatConfigs.recommended,\n importXPlugin.flatConfigs.typescript,\n sortPlugin.configs['flat/recommended'],\n\n // Code quality plugins\n unicornPlugin.configs.recommended,\n (comments as { recommended: Linter.Config }).recommended,\n sonarjsPlugin.configs.recommended,\n\n // General JavaScript/TypeScript configuration\n {\n files: ['**/*.{js,mjs,cjs,ts,tsx}'],\n languageOptions: {\n ecmaVersion: 'latest',\n globals: {\n ...globals.browser,\n ...globals.node,\n ...globals.es2025,\n ...globals.vitest,\n },\n parserOptions: {\n projectService: true,\n warnOnUnsupportedTypeScriptVersion: true,\n },\n sourceType: 'module',\n },\n linterOptions: {\n reportUnusedDisableDirectives: true,\n },\n plugins: {\n 'no-loops': noLoopsPlugin as Plugin,\n 'ban': banPlugin as Plugin,\n 'testing-library': testingLibraryPlugin,\n 'unused-imports': unusedImports,\n },\n rules: {\n // --- Stylistic Rules ---\n // Core rules turned off in favor of stylistic rules\n 'quotes': 'off',\n 'jsx-quotes': 'off',\n 'func-call-spacing': 'off',\n 'dot-notation': 'off',\n 'no-unused-expressions': 'off',\n 'no-use-before-define': 'off',\n 'default-param-last': 'off',\n 'no-redeclare': 'off',\n 'no-shadow': 'off',\n\n // Stylistic (overrides vs stylistic recommended)\n 'quote-props': ['warn', 'consistent-as-needed'],\n '@stylistic/quotes': ['warn', 'single', { avoidEscape: true }],\n '@stylistic/jsx-quotes': ['warn', 'prefer-single'],\n '@stylistic/jsx-one-expression-per-line': 'off',\n '@stylistic/block-spacing': ['warn', 'never'],\n '@stylistic/object-curly-newline': [\n 'warn',\n { ObjectPattern: { multiline: true, consistent: true } },\n ],\n 'object-property-newline': [\n 'warn',\n { allowAllPropertiesOnSameLine: true },\n ],\n 'function-call-argument-newline': ['warn', 'consistent'],\n 'no-multiple-empty-lines': ['warn', { max: 1, maxEOF: 1 }],\n 'no-multi-spaces': 'warn',\n 'no-useless-rename': 'warn',\n 'arrow-spacing': 'warn',\n 'space-infix-ops': 'warn',\n '@stylistic/operator-linebreak': [\n 'warn',\n 'after',\n { overrides: { '?': 'before', ':': 'before' } },\n ],\n 'comma-style': ['warn', 'last'],\n 'complexity': ['warn', { max: 20 }],\n '@stylistic/max-len': [\n 'warn',\n {\n code: 100,\n comments: 120,\n ignoreUrls: true,\n ignoreTrailingComments: true,\n ignorePattern:\n String.raw`^.*eslint-(disable|enable).+|it\\(|ErrorCodes|@param|@return|^\\s*\\[[^\\]]+\\]:\\s*.+?;$`,\n ignoreTemplateLiterals: true,\n ignoreStrings: true,\n ignoreRegExpLiterals: true,\n },\n ],\n 'no-extra-parens': [\n 'error',\n 'all',\n {\n ignoreJSX: 'all', // don’t complain about JSX parens\n enforceForArrowConditionals: false,\n nestedBinaryExpressions: false,\n },\n ],\n '@stylistic/jsx-wrap-multilines': [\n 'error',\n {\n declaration: 'parens-new-line',\n assignment: 'parens-new-line',\n return: 'parens-new-line',\n arrow: 'parens-new-line',\n condition: 'parens-new-line',\n logical: 'parens-new-line',\n },\n ],\n 'max-lines-per-function': ['error', 120],\n 'max-lines': ['error', { max: 900, skipBlankLines: true }],\n 'func-style': ['warn', 'expression'],\n 'padding-line-between-statements': [\n 'error',\n {\n // Require a blank line after directive prologues (\"use client\", \"use strict\", etc.)\n blankLine: 'always',\n prev: 'directive',\n next: '*',\n },\n {\n // But we *don't* want to require blank lines between multiple directives\n // (so `\"use client\";` can be followed immediately by `\"use strict\";`)\n blankLine: 'any',\n prev: 'directive',\n next: 'directive',\n },\n {\n // No blank line between import and import statements\n blankLine: 'never',\n prev: 'import',\n next: 'import',\n },\n ],\n 'object-shorthand': ['warn', 'always'],\n 'arrow-body-style': ['warn', 'as-needed'],\n 'prefer-destructuring': 'warn',\n 'prefer-arrow-callback': 'error',\n 'prefer-template': 'warn',\n 'one-var': ['error', 'never'],\n 'no-bitwise': 'error',\n\n // TypeScript equivalents and customizations\n '@typescript-eslint/no-redeclare': 'error',\n '@typescript-eslint/default-param-last': 'error',\n '@typescript-eslint/require-await': 'off',\n 'no-return-await': 'warn',\n 'no-nested-ternary': 'warn',\n 'no-unneeded-ternary': 'warn',\n 'no-else-return': 'warn',\n 'no-constant-condition': 'off',\n '@typescript-eslint/dot-notation': 'error',\n '@typescript-eslint/no-unused-expressions': [\n 'error',\n {\n allowShortCircuit: true,\n allowTernary: true,\n allowTaggedTemplates: true,\n },\n ],\n '@typescript-eslint/no-use-before-define': [\n 'error',\n { variables: true, functions: false },\n ],\n 'no-console': 'warn',\n 'no-useless-concat': 'warn',\n 'no-new': 'error',\n 'no-extra-semi': 'error',\n 'no-implicit-coercion': ['warn', { allow: ['!!'] }],\n 'no-extra-boolean-cast': 'warn',\n\n // Magic numbers\n 'no-magic-numbers': 'off',\n '@typescript-eslint/no-magic-numbers': [\n 'error',\n {\n ignoreEnums: true,\n ignoreArrayIndexes: true,\n ignoreDefaultValues: true,\n ignoreTypeIndexes: true,\n ignore: [0, 1, -1, 2],\n },\n ],\n\n // More stylistic specifics\n '@stylistic/brace-style': ['warn', '1tbs', { allowSingleLine: true }],\n '@stylistic/comma-dangle': ['warn', 'always-multiline'],\n '@stylistic/comma-spacing': 'warn',\n '@stylistic/function-call-spacing': ['error'],\n\n // Naming\n 'camelcase': ['warn', { allow: ['^_', 'content_type', 'reply_to'] }],\n '@typescript-eslint/naming-convention': [\n 'warn',\n // Property naming rules\n {\n selector: 'property',\n format: ['camelCase', 'UPPER_CASE'],\n leadingUnderscore: 'allow',\n filter: {\n regex: String.raw`^_|[- /?:{}@%]|Provider|Comp|^item$|^condition$|^container$|^Container$|^\\d+$`, // ignore properties with dashes/slashes/spaces\n match: false,\n },\n },\n // Variable-like naming rules\n {\n selector: 'variableLike',\n format: ['camelCase', 'UPPER_CASE', 'PascalCase'],\n trailingUnderscore: 'allow',\n },\n // Function variable naming rules\n {\n selector: 'variable',\n format: ['camelCase', 'PascalCase'],\n types: ['function'],\n filter: {\n regex: '^_|Comp|Provider|Stack|Wrapper|Root', // allowing for 'Component' parameter names\n match: false,\n },\n },\n // Type naming rules\n {\n selector: 'typeLike',\n format: ['PascalCase'],\n filter: {\n regex: '^_|_$',\n match: false,\n },\n },\n // Boolean naming rules\n {\n selector: ['variable', 'property', 'parameter', 'typeProperty'],\n types: ['boolean'],\n format: ['UPPER_CASE', 'PascalCase'], // must be PascalCase because prefix is trimmed\n prefix: booleanNamePrefixes,\n filter: {\n regex: booleanNameExceptions,\n match: false,\n },\n },\n ],\n\n // TS type safety and preferences\n '@typescript-eslint/no-explicit-any': ['warn', { fixToUnknown: true }],\n '@typescript-eslint/no-inferrable-types': ['warn', { ignoreParameters: true }],\n '@typescript-eslint/no-shadow': 'error',\n '@typescript-eslint/no-unsafe-enum-comparison': 'off',\n '@typescript-eslint/no-base-to-string': 'off',\n '@typescript-eslint/prefer-nullish-coalescing': [\n 'warn',\n { ignorePrimitives: { string: true } },\n ],\n '@typescript-eslint/no-non-null-asserted-nullish-coalescing': 'error',\n '@typescript-eslint/no-non-null-asserted-optional-chain': 'error',\n '@typescript-eslint/no-extra-non-null-assertion': 'error',\n '@typescript-eslint/no-confusing-non-null-assertion': 'error',\n '@typescript-eslint/ban-ts-comment': [\n 'error',\n { 'ts-expect-error': 'allow-with-description', 'ts-ignore': 'allow-with-description' },\n ],\n '@typescript-eslint/no-empty-object-type': 'warn',\n '@typescript-eslint/no-unsafe-function-type': 'warn',\n '@typescript-eslint/no-wrapper-object-types': 'warn',\n '@typescript-eslint/array-type': ['warn', { default: 'array' }],\n '@stylistic/array-element-newline': ['warn', { multiline: true, consistent: true }],\n '@stylistic/array-bracket-newline': ['warn', 'consistent'],\n '@stylistic/no-mixed-operators': ['warn', { allowSamePrecedence: true }],\n '@stylistic/rest-spread-spacing': ['warn', 'never'],\n '@typescript-eslint/no-unnecessary-condition': 'warn',\n '@typescript-eslint/no-unnecessary-boolean-literal-compare': 'warn',\n\n // TS consistency\n '@typescript-eslint/consistent-indexed-object-style': ['error', 'record'],\n '@typescript-eslint/consistent-type-assertions': [\n 'error',\n { assertionStyle: 'as' },\n ],\n '@typescript-eslint/consistent-type-definitions': ['error', 'type'],\n '@typescript-eslint/consistent-type-exports': 'error',\n '@typescript-eslint/method-signature-style': 'error',\n\n // Expressions and async\n '@typescript-eslint/no-confusing-void-expression': [\n 'error',\n { ignoreArrowShorthand: true },\n ],\n '@typescript-eslint/no-invalid-void-type': 'off',\n '@typescript-eslint/no-meaningless-void-operator': 'error',\n '@typescript-eslint/no-misused-promises': 'off',\n '@typescript-eslint/no-var-requires': 'off',\n\n // TS modern prefs\n '@typescript-eslint/prefer-includes': 'error',\n '@typescript-eslint/prefer-optional-chain': 'error',\n '@typescript-eslint/prefer-reduce-type-parameter': 'error',\n '@typescript-eslint/prefer-string-starts-ends-with': 'error',\n\n // --- Comment Formatting Rules ---\n 'spaced-comment': 'off',\n '@stylistic/spaced-comment': ['warn', 'always', { line: { markers: ['!', '?', '-', '**'] } }],\n\n // --- Unused Variables & Imports Rules ---\n 'no-unused-vars': 'off',\n '@stylistic/no-unused-vars': 'off',\n 'sonarjs/no-unused-vars': 'off',\n 'unused-imports/no-unused-imports': 'error',\n 'unused-imports/no-unused-vars': [\n 'warn',\n {\n vars: 'all',\n varsIgnorePattern: '^_',\n args: 'after-used',\n argsIgnorePattern: '^_',\n },\n ],\n\n // --- Banned API Rules ---\n 'ban/ban': [\n 'warn',\n {\n name: ['*', 'concat'],\n message:\n 'Imperative operation: prefer use ES6 spread, i.e. [...items, newItem]',\n },\n {\n name: ['Object', 'assign'],\n message: 'Use the spread operator `{...obj}` instead',\n },\n ],\n\n // --- Code Structure Restrictions ---\n // No loops rule\n 'no-loops/no-loops': 'error',\n\n // Syntax restrictions\n 'no-restricted-syntax': [\n 'error',\n {\n selector: 'SwitchStatement',\n message:\n 'Switch statements are banned. Use `ts-pattern` instead.',\n },\n ],\n\n // --- ESLint Comments Rules ---\n '@eslint-community/eslint-comments/require-description': ['error', { ignore: ['eslint-enable'] }],\n\n // --- Testing Library Rules ---\n 'testing-library/no-render-in-lifecycle': ['error', { allowTestingFrameworkSetupHook: 'beforeEach' }],\n 'testing-library/no-unnecessary-act': 'off',\n\n // --- Import Rules ---\n // Commented out rules kept for reference\n // 'import/no-default-export': 'warn',\n // 'import/no-restricted-paths': ['warn', { zones: restrictedPaths }], // Define restrictedPaths\n 'import-x/no-named-as-default-member': 'off',\n 'import-x/no-absolute-path': 'warn',\n 'import-x/newline-after-import': ['warn', { count: 1 }],\n 'import-x/no-cycle': ['error', { maxDepth: 1, ignoreExternal: true }],\n 'import-x/order': ['warn',\n {\n groups: [\n 'builtin', // Node.js built-in modules\n 'external', // Packages from node_modules\n ['type', 'internal'], // Type imports, Absolute imports (often aliased like 'src/components')\n 'parent', // Relative imports from parent directories (../)\n 'sibling', // Relative imports from sibling directories (./)\n 'index', // Index file imports (./index.js)\n 'object', // Imports from object notation\n ],\n }],\n\n // --- Sort Rules ---\n 'sort/imports': 'off', // use 'import-x/order' rule instead\n 'sort/object-properties': 'off',\n 'sort/type-properties': 'warn',\n 'sort/string-unions': 'off',\n\n // --- Unicorn Rules ---\n 'unicorn/prefer-global-this': 'off',\n 'unicorn/prevent-abbreviations': 'off',\n 'unicorn/no-array-reduce': 'off',\n 'unicorn/no-array-for-each': 'off',\n 'unicorn/prefer-top-level-await': 'off',\n 'unicorn/no-array-callback-reference': 'off',\n 'unicorn/prefer-switch': 'off',\n 'unicorn/no-abusive-eslint-disable': 'off',\n 'unicorn/prefer-object-from-entries': 'off',\n 'unicorn/no-null': 'off',\n 'unicorn/filename-case': [\n 'warn',\n {\n cases: { camelCase: true, kebabCase: true },\n ignore: [/\\.(js|cjs)$/], // Keep ignoring JS/CJS if needed\n },\n ],\n 'unicorn/no-unused-properties': 'warn',\n 'unicorn/consistent-destructuring': 'warn',\n 'unicorn/no-useless-undefined': ['warn', { checkArguments: false }],\n\n // --- SonarJS Rules ---\n 'sonarjs/no-duplicated-branches': 'warn',\n 'sonarjs/no-duplicate-string': 'off',\n 'sonarjs/deprecation': 'off',\n 'sonarjs/cognitive-complexity': 'off', // use 'complexity' rule instead\n 'sonarjs/no-nested-functions': 'off', // use 'complexity' rule instead\n 'sonarjs/function-return-type': 'off', // use '@typescript-eslint/explicit-module-boundary-types' rule instead\n 'sonarjs/no-redundant-optional': 'off', // use '@typescript-eslint/no-redundant-optional' rule instead\n 'sonarjs/no-commented-code': 'off', // slow rule\n 'sonarjs/todo-tag': 'off', // eventually re-enable\n 'sonarjs/pseudo-random': 'off',\n 'sonarjs/different-types-comparison': 'off', // too many false positives\n 'sonarjs/redundant-type-aliases': 'off',\n 'sonarjs/void-use': 'off', // allow to annotate async functions not explicitly awaited\n 'sonarjs/no-nested-conditional': 'off', // use 'no-nested-ternary' rule instead\n 'sonarjs/no-hardcoded-passwords': 'off',\n },\n settings: {\n 'import-x/extensions': ['.js', '.cjs', '.mjs'],\n 'import-x/parsers': { 'typescript-eslint': ['.ts', '.tsx'] },\n 'import-x/resolver-next': [\n createTypeScriptImportResolver({\n alwaysTryTypes: true,\n bun: true,\n }),\n ],\n },\n },\n\n // Config files overrides\n {\n files: ['**/*.config.{ts,js,mjs,cjs}'],\n rules: {\n '@typescript-eslint/no-magic-numbers': 'off',\n '@typescript-eslint/naming-convention': 'off',\n },\n },\n];\n\n// Export shared utilities for use in other packages\nexport { booleanNameConvention, booleanNameExceptions, booleanNamePrefixes } from './boolean-naming';\n\nexport default config;\n\n/* eslint-enable @typescript-eslint/no-magic-numbers */\n/* eslint-enable @typescript-eslint/naming-convention */\n","/**\n * Combines an array of regex expressions into a single regex expression via the union operator.\n */\nconst concatElementsByRegexUnion = (elements: string[]) =>\n elements.reduce((element, accum, index) => `${accum}${index === 0 ? '' : '|'}${element}`, '');\n\n// Prefixes allowed at the start of a boolean variable/parameter name\nexport const booleanNamePrefixes = [\n 'is',\n 'as',\n 'are',\n 'was',\n 'should',\n 'has',\n 'can',\n 'did',\n 'will',\n 'use',\n 'does',\n 'show',\n 'allow',\n 'enabled',\n 'enable',\n 'disable',\n 'editable',\n 'refetch',\n 'destructive',\n 'hide',\n 'error',\n 'override',\n 'need',\n 'must',\n 'require',\n 'want',\n 'with',\n];\n// Regex for the rest of a boolean variable/parameter name (the part after the prefix)\nconst booleanNameSuffixes = '[A-Z]([A-Za-z]?)+';\n// Exceptions to the rule for allowable boolean variable/parameter names\nconst booleanNameExceptionsList = [\n '^_',\n '_$',\n '[- /?:{}@%]',\n '^[A-Z][a-z]*([A-Z][a-z]*)',\n '^item$',\n '^value$',\n '^condition$',\n '^container$',\n '^included',\n '^center$',\n '^debug$',\n '^concurrent',\n '^animated$',\n '^allow',\n '^visible',\n '^merge$',\n '^multiSelect$',\n 'Shown$',\n '^enumerable$',\n '^configurable$',\n];\n// A singular regex string for the boolean name exceptions (instead of array of expressions)\nexport const booleanNameExceptions = concatElementsByRegexUnion(booleanNameExceptionsList);\n\n// The full boolean naming convetions regex\nexport const booleanNameConvention = new RegExp(\n `${concatElementsByRegexUnion(\n booleanNamePrefixes,\n )}|${booleanNameSuffixes}|${booleanNameExceptions}`,\n).toString();\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/index.ts","../src/boolean-naming.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-magic-numbers, @typescript-eslint/naming-convention -- config file */\nimport eslint from '@eslint/js';\n// @ts-expect-error - no types available\nimport comments from '@eslint-community/eslint-plugin-eslint-comments/configs';\nimport stylistic from '@stylistic/eslint-plugin';\nimport { createTypeScriptImportResolver } from 'eslint-import-resolver-typescript';\nimport importXPlugin from 'eslint-plugin-import-x';\nimport sonarjsPlugin from 'eslint-plugin-sonarjs';\nimport sortPlugin from 'eslint-plugin-sort';\nimport testingLibraryPlugin from 'eslint-plugin-testing-library';\nimport unicornPlugin from 'eslint-plugin-unicorn';\nimport unusedImports from 'eslint-plugin-unused-imports';\nimport globals from 'globals';\nimport tseslint from 'typescript-eslint';\n// @ts-expect-error - no types available\nimport noLoopsPlugin from 'eslint-plugin-no-loops';\n// @ts-expect-error - no types available\nimport banPlugin from 'eslint-plugin-ban';\nimport type { Linter } from 'eslint';\nimport { booleanNameExceptions, booleanNamePrefixes } from './boolean-naming';\n\ntype Plugin = typeof testingLibraryPlugin;\n\nconst config: Linter.Config[] = [\n // Base configurations\n eslint.configs.recommended,\n ...tseslint.configs.recommendedTypeChecked,\n ...tseslint.configs.stylisticTypeChecked,\n ...tseslint.configs.strict,\n\n // Plugin configurations\n stylistic.configs.customize({\n arrowParens: true,\n braceStyle: '1tbs',\n commaDangle: 'always-multiline',\n indent: 2,\n quoteProps: 'consistent-as-needed',\n quotes: 'single',\n semi: true,\n }),\n importXPlugin.flatConfigs.recommended,\n importXPlugin.flatConfigs.typescript,\n sortPlugin.configs['flat/recommended'],\n unicornPlugin.configs.recommended,\n (comments as { recommended: Linter.Config }).recommended,\n sonarjsPlugin.configs.recommended,\n\n // Main configuration\n {\n files: ['**/*.{js,mjs,cjs,ts,tsx}'],\n languageOptions: {\n ecmaVersion: 'latest',\n globals: {\n ...globals.browser,\n ...globals.node,\n ...globals.es2025,\n ...globals.vitest,\n },\n parserOptions: {\n projectService: true,\n warnOnUnsupportedTypeScriptVersion: true,\n },\n sourceType: 'module',\n },\n linterOptions: {\n reportUnusedDisableDirectives: true,\n },\n plugins: {\n 'no-loops': noLoopsPlugin as Plugin,\n 'ban': banPlugin as Plugin,\n 'testing-library': testingLibraryPlugin,\n 'unused-imports': unusedImports,\n },\n rules: {\n // === DISABLED CORE RULES (replaced by plugins) ===\n // These core ESLint rules are disabled because we use enhanced versions from plugins:\n 'quotes': 'off', // Replaced by @stylistic/quotes with better formatting options and JSX support\n 'jsx-quotes': 'off', // Replaced by @stylistic/jsx-quotes for JSX-specific quote handling\n 'func-call-spacing': 'off', // Replaced by @stylistic/function-call-spacing for consistent spacing\n 'dot-notation': 'off', // Replaced by @typescript-eslint/dot-notation with TypeScript awareness\n 'no-unused-expressions': 'off', // Replaced by @typescript-eslint/no-unused-expressions with better TS support\n 'no-use-before-define': 'off', // Replaced by @typescript-eslint/no-use-before-define for TypeScript hoisting rules\n 'default-param-last': 'off', // Replaced by @typescript-eslint/default-param-last with TS parameter awareness\n 'no-redeclare': 'off', // Replaced by @typescript-eslint/no-redeclare for better type checking\n 'no-shadow': 'off', // Replaced by @typescript-eslint/no-shadow for TypeScript variable shadowing\n 'spaced-comment': 'off', // Replaced by @stylistic/spaced-comment with more formatting options\n 'no-unused-vars': 'off', // Replaced by @typescript-eslint/no-unused-vars and unused-imports plugin\n '@stylistic/no-unused-vars': 'off', // Replaced by unused-imports/no-unused-vars for better import handling\n 'sonarjs/no-unused-vars': 'off', // Replaced by unused-imports/no-unused-vars to avoid conflicts\n 'no-magic-numbers': 'off', // Replaced by @typescript-eslint/no-magic-numbers with TypeScript-aware exceptions\n\n // === DISABLED PLUGIN RULES (intentionally turned off) ===\n // Sort plugin rules (replaced by import-x/order):\n 'sort/imports': 'off', // Replaced by import-x/order which has better TypeScript support\n 'sort/object-properties': 'off', // Object property sorting is not required\n 'sort/string-unions': 'off', // String union sorting is not required\n\n // Unicorn rules that are too restrictive or don't match our style:\n 'unicorn/prefer-global-this': 'off', // GlobalThis is not always preferred over window/global\n 'unicorn/prevent-abbreviations': 'off', // Common abbreviations (props, args, etc.) are acceptable\n 'unicorn/no-array-reduce': 'off', // Array.reduce is a valid and useful method\n 'unicorn/no-array-for-each': 'off', // Array.forEach is preferred over for...of in many cases\n 'unicorn/prefer-top-level-await': 'off', // Top-level await is not always appropriate\n 'unicorn/no-array-callback-reference': 'off', // Method references as callbacks are acceptable\n 'unicorn/prefer-switch': 'off', // Switch statements are banned (see no-restricted-syntax below)\n 'unicorn/prefer-object-from-entries': 'off', // Object.fromEntries is not always better\n 'unicorn/no-null': 'off', // Null is still a valid value in many contexts\n\n // SonarJS rules that are disabled for various reasons:\n 'sonarjs/cognitive-complexity': 'off', // Replaced by core complexity rule which is simpler\n 'sonarjs/no-nested-functions': 'off', // Replaced by complexity rule, nested functions are sometimes needed\n 'sonarjs/function-return-type': 'off', // TypeScript handles return type checking better\n 'sonarjs/no-redundant-optional': 'off', // TypeScript handles optional types better\n 'sonarjs/no-commented-code': 'off', // Performance-intensive rule, commented code is sometimes useful\n 'sonarjs/todo-tag': 'off', // TODO comments are acceptable during development\n 'sonarjs/pseudo-random': 'off', // Math.random() is acceptable for non-cryptographic uses\n 'sonarjs/void-use': 'off', // Allow void operators for type assertions and async function annotations\n 'sonarjs/no-nested-conditional': 'off', // Replaced by no-nested-ternary rule\n 'sonarjs/no-hardcoded-passwords': 'off',\n\n // Import and testing rules:\n 'import-x/no-named-as-default-member': 'off', // Named default exports are sometimes necessary\n\n // === STYLISTIC & FORMATTING ===\n '@stylistic/quotes': ['warn', 'single', { avoidEscape: true }],\n '@stylistic/jsx-quotes': ['warn', 'prefer-single'],\n '@stylistic/block-spacing': ['warn', 'never'],\n '@stylistic/object-curly-newline': [\n 'warn',\n { ObjectPattern: { multiline: true, consistent: true } },\n ],\n '@stylistic/operator-linebreak': [\n 'warn',\n 'after',\n { overrides: { '?': 'before', ':': 'before' } },\n ],\n '@stylistic/max-len': [\n 'warn',\n {\n code: 100,\n comments: 120,\n ignoreUrls: true,\n ignoreTrailingComments: true,\n ignorePattern: String.raw`^.*eslint-(disable|enable).+|it\\(|ErrorCodes|@param|@return|^\\s*\\[[^\\]]+\\]:\\s*.+?;$`,\n ignoreTemplateLiterals: true,\n ignoreStrings: true,\n ignoreRegExpLiterals: true,\n },\n ],\n '@stylistic/jsx-wrap-multilines': [\n 'error',\n {\n declaration: 'parens-new-line',\n assignment: 'parens-new-line',\n return: 'parens-new-line',\n arrow: 'parens-new-line',\n condition: 'parens-new-line',\n logical: 'parens-new-line',\n },\n ],\n '@stylistic/brace-style': ['warn', '1tbs', { allowSingleLine: true }],\n '@stylistic/comma-dangle': ['warn', 'always-multiline'],\n '@stylistic/comma-spacing': 'warn',\n '@stylistic/function-call-spacing': ['error'],\n '@stylistic/array-element-newline': ['warn', { multiline: true, consistent: true }],\n '@stylistic/array-bracket-newline': ['warn', 'consistent'],\n '@stylistic/no-mixed-operators': ['warn', { allowSamePrecedence: true }],\n '@stylistic/rest-spread-spacing': ['warn', 'never'],\n '@stylistic/spaced-comment': ['warn', 'always', { line: { markers: ['!', '?', '-', '**'] } }],\n '@stylistic/jsx-one-expression-per-line': 'warn',\n\n // === CODE QUALITY & STRUCTURE ===\n // Complexity and size limits:\n 'complexity': ['warn', { max: 20 }], // Warn when cyclomatic complexity exceeds 20\n 'max-lines-per-function': ['error', 120], // Error when functions exceed 120 lines\n 'max-lines': ['error', { max: 600, skipBlankLines: true }], // Error when files exceed 900 lines\n\n // Code style preferences:\n 'func-style': ['warn', 'expression'], // Prefer function expressions over declarations\n 'object-shorthand': ['warn', 'always'], // Use object shorthand ({ name } instead of { name: name })\n 'arrow-body-style': ['warn', 'as-needed'], // Use concise arrow functions when possible\n 'prefer-destructuring': 'warn', // Prefer destructuring for object/array access\n 'prefer-arrow-callback': 'error', // Prefer arrow functions for callbacks\n 'prefer-template': 'warn', // Use template literals instead of string concatenation\n 'one-var': ['error', 'never'], // Declare each variable separately\n 'no-bitwise': 'error', // Disallow bitwise operators (often used for obfuscation)\n\n // Parentheses and expression clarity:\n 'no-extra-parens': [\n 'error',\n 'all',\n {\n ignoreJSX: 'all', // JSX requires parentheses for multi-line expressions\n enforceForArrowConditionals: false, // Allow parentheses in arrow conditionals\n nestedBinaryExpressions: false, // Allow parentheses for clarity in nested expressions\n },\n ],\n\n // === SECURITY & BEST PRACTICES ===\n // Prevent dangerous code execution patterns:\n 'no-eval': 'error', // Disallows eval() which can execute arbitrary code\n 'no-implied-eval': 'error', // Catches indirect eval usage (setTimeout with string, etc.)\n 'no-new-func': 'error', // Prevents Function constructor which is similar to eval\n 'no-script-url': 'error', // Disallows javascript: URLs which are XSS vectors\n\n // Error handling and promises:\n 'prefer-promise-reject-errors': 'error', // Ensures promises are rejected with Error objects\n 'no-throw-literal': 'error', // Prevents throwing non-Error objects (strings, numbers, etc.)\n\n // Code quality and safety:\n 'no-unreachable-loop': 'error', // Catches loops with unreachable iterations\n 'no-unsafe-negation': 'error', // Prevents unsafe negation patterns that can cause bugs\n 'yoda': 'error', // Enforces consistent comparison order (variable == constant, not constant == variable)\n\n // Promise constructor safety:\n 'no-promise-executor-return': 'error', // Prevents returning values from promise executor\n 'no-async-promise-executor': 'error', // Prevents async promise constructors (anti-pattern)\n\n // === GENERAL JAVASCRIPT RULES ===\n 'quote-props': ['warn', 'consistent-as-needed'],\n 'object-property-newline': ['warn', { allowAllPropertiesOnSameLine: true }],\n 'function-call-argument-newline': ['warn', 'consistent'],\n 'no-multiple-empty-lines': ['warn', { max: 1, maxEOF: 1 }],\n 'no-multi-spaces': 'warn',\n 'no-useless-rename': 'warn',\n 'arrow-spacing': 'warn',\n 'space-infix-ops': 'warn',\n 'comma-style': ['warn', 'last'],\n 'no-nested-ternary': 'warn',\n 'no-unneeded-ternary': 'warn',\n 'no-else-return': 'error',\n 'no-console': 'warn',\n 'no-useless-concat': 'warn',\n 'no-new': 'error',\n 'no-extra-semi': 'error',\n 'no-implicit-coercion': ['warn', { allow: ['!!'] }],\n 'no-extra-boolean-cast': 'warn',\n 'padding-line-between-statements': [\n 'error',\n {\n blankLine: 'always',\n prev: 'directive',\n next: '*',\n },\n {\n blankLine: 'any',\n prev: 'directive',\n next: 'directive',\n },\n {\n blankLine: 'never',\n prev: 'import',\n next: 'import',\n },\n ],\n\n // === TYPESCRIPT RULES ===\n // Type safety & preferences\n '@typescript-eslint/no-explicit-any': ['warn', { fixToUnknown: true }],\n '@typescript-eslint/no-inferrable-types': ['warn', { ignoreParameters: true }],\n '@typescript-eslint/prefer-nullish-coalescing': [\n 'warn',\n { ignorePrimitives: { string: true } },\n ],\n '@typescript-eslint/no-non-null-asserted-nullish-coalescing': 'error',\n '@typescript-eslint/no-non-null-asserted-optional-chain': 'error',\n '@typescript-eslint/no-extra-non-null-assertion': 'error',\n '@typescript-eslint/no-confusing-non-null-assertion': 'error',\n '@typescript-eslint/ban-ts-comment': [\n 'error',\n { 'ts-expect-error': 'allow-with-description', 'ts-ignore': 'allow-with-description' },\n ],\n '@typescript-eslint/no-empty-object-type': 'warn',\n '@typescript-eslint/no-unsafe-function-type': 'warn',\n '@typescript-eslint/no-wrapper-object-types': 'warn',\n '@typescript-eslint/array-type': ['warn', { default: 'array' }],\n '@typescript-eslint/no-unnecessary-condition': 'warn',\n '@typescript-eslint/no-unnecessary-boolean-literal-compare': 'warn',\n '@typescript-eslint/no-floating-promises': 'error',\n '@typescript-eslint/await-thenable': 'error',\n '@typescript-eslint/prefer-readonly': 'warn',\n '@typescript-eslint/no-invalid-void-type': 'error', // Void types are valid in many contexts (e.g., Promise<void>)\n '@typescript-eslint/no-misused-promises': 'error', // Too many false positives with promise handling\n\n // TypeScript consistency\n '@typescript-eslint/consistent-indexed-object-style': ['error', 'record'],\n '@typescript-eslint/consistent-type-assertions': ['error', { assertionStyle: 'as' }],\n '@typescript-eslint/consistent-type-definitions': ['error', 'type'],\n '@typescript-eslint/consistent-type-exports': 'error',\n '@typescript-eslint/method-signature-style': 'error',\n\n // TypeScript equivalents of core rules\n '@typescript-eslint/no-redeclare': 'error',\n '@typescript-eslint/default-param-last': 'error',\n '@typescript-eslint/dot-notation': 'error',\n '@typescript-eslint/no-unused-expressions': [\n 'error',\n {\n allowShortCircuit: true,\n allowTernary: true,\n allowTaggedTemplates: true,\n },\n ],\n '@typescript-eslint/no-use-before-define': [\n 'error',\n { variables: true, functions: false },\n ],\n '@typescript-eslint/no-shadow': 'error',\n '@typescript-eslint/no-magic-numbers': [\n 'error',\n {\n ignoreEnums: true,\n ignoreArrayIndexes: true,\n ignoreDefaultValues: true,\n ignoreTypeIndexes: true,\n ignore: [0, 1, -1, 2],\n },\n ],\n\n // Expressions and async\n '@typescript-eslint/no-confusing-void-expression': [\n 'error',\n { ignoreArrowShorthand: true },\n ],\n '@typescript-eslint/no-meaningless-void-operator': 'error',\n\n // TypeScript modern preferences\n '@typescript-eslint/prefer-includes': 'error',\n '@typescript-eslint/prefer-optional-chain': 'error',\n '@typescript-eslint/prefer-reduce-type-parameter': 'error',\n '@typescript-eslint/prefer-string-starts-ends-with': 'error',\n\n // === NAMING CONVENTIONS ===\n 'camelcase': ['warn', { allow: ['^_', 'content_type', 'reply_to'] }],\n '@typescript-eslint/naming-convention': [\n 'warn',\n {\n selector: 'property',\n format: ['camelCase', 'UPPER_CASE'],\n leadingUnderscore: 'allow',\n filter: {\n regex: String.raw`^_|[- /?:{}@%]|Provider|Comp|^item$|^condition$|^container$|^Container$|^\\d+$`,\n match: false,\n },\n },\n {\n selector: 'variableLike',\n format: ['camelCase', 'UPPER_CASE', 'PascalCase'],\n trailingUnderscore: 'allow',\n },\n {\n selector: 'variable',\n format: ['camelCase', 'PascalCase'],\n types: ['function'],\n filter: {\n regex: '^_|Comp|Provider|Stack|Wrapper|Root',\n match: false,\n },\n },\n {\n selector: 'typeLike',\n format: ['PascalCase'],\n filter: {\n regex: '^_|_$',\n match: false,\n },\n },\n {\n selector: ['variable', 'property', 'parameter', 'typeProperty'],\n types: ['boolean'],\n format: ['UPPER_CASE', 'PascalCase'],\n prefix: booleanNamePrefixes,\n filter: {\n regex: booleanNameExceptions,\n match: false,\n },\n },\n ],\n\n // === IMPORTS & EXPORTS ===\n // Import path and structure validation:\n 'import-x/no-absolute-path': 'warn', // Prevent absolute paths in imports (should use relative or package imports)\n 'import-x/newline-after-import': ['warn', { count: 1 }], // Require exactly one blank line after imports\n 'import-x/no-cycle': ['error', { maxDepth: 1, ignoreExternal: true }], // Prevent circular dependencies\n 'import-x/order': ['warn',\n {\n 'groups': [\n 'builtin', // Node.js built-in modules\n 'external', // Packages from node_modules\n ['type', 'internal'], // Type imports, Absolute imports (often aliased like 'src/components')\n 'parent', // Relative imports from parent directories (../)\n 'sibling', // Relative imports from sibling directories (./)\n 'index', // Index file imports (./index.js)\n 'object', // Imports from object notation\n ],\n 'newlines-between': 'never',\n }],\n\n // === UNUSED IMPORTS & VARIABLES ===\n // Automatically remove unused imports:\n 'unused-imports/no-unused-imports': 'error', // Error on unused imports (auto-fixable)\n\n // Handle unused variables with underscore convention:\n 'unused-imports/no-unused-vars': [\n 'warn',\n {\n vars: 'all', // Check all variables\n varsIgnorePattern: '^_', // Ignore variables starting with underscore\n args: 'after-used', // Only check arguments after the last used one\n argsIgnorePattern: '^_', // Ignore arguments starting with underscore\n },\n ],\n\n // === BANNED APIS ===\n // Ban imperative array/object operations in favor of modern syntax:\n 'ban/ban': [\n 'warn',\n {\n name: ['*', 'concat'],\n message: 'Array.concat is an imperative operation. Use ES6 spread syntax instead: [...items, newItem]',\n },\n {\n name: ['Object', 'assign'],\n message: 'Object.assign is imperative. Use the spread operator instead: {...obj}',\n },\n ],\n\n // === CODE STRUCTURE RESTRICTIONS ===\n // Enforce functional programming patterns:\n 'no-loops/no-loops': 'error', // Ban for/while/do-while loops, use array methods instead\n\n // Enforce pattern-based conditional logic:\n 'no-restricted-syntax': [\n 'error',\n {\n selector: 'SwitchStatement',\n message: 'Switch statements are banned. Use `ts-pattern` library for pattern matching instead.',\n },\n ],\n\n // === ESLINT COMMENTS ===\n '@eslint-community/eslint-comments/require-description': ['error', { ignore: ['eslint-enable'] }],\n\n // === TESTING LIBRARY ===\n 'testing-library/no-render-in-lifecycle': ['error', { allowTestingFrameworkSetupHook: 'beforeEach' }],\n\n // === SORTING ===\n 'sort/type-properties': 'warn',\n\n // === UNICORN ===\n 'unicorn/filename-case': [\n 'warn',\n {\n cases: { camelCase: true, kebabCase: true },\n ignore: [/\\.(js|cjs)$/], // Keep ignoring JS/CJS if needed\n },\n ],\n 'unicorn/no-unused-properties': 'warn',\n 'unicorn/consistent-destructuring': 'warn',\n 'unicorn/no-useless-undefined': ['warn', { checkArguments: false }],\n\n // === SONARJS ===\n 'sonarjs/no-duplicated-branches': 'warn',\n },\n settings: {\n 'import-x/extensions': ['.js', '.cjs', '.mjs'],\n 'import-x/parsers': { 'typescript-eslint': ['.ts', '.tsx'] },\n 'import-x/resolver-next': [\n createTypeScriptImportResolver({\n alwaysTryTypes: true,\n bun: true,\n }),\n ],\n },\n },\n\n // Config files overrides\n {\n files: ['**/*.config.{ts,js,mjs,cjs}'],\n rules: {\n '@typescript-eslint/no-magic-numbers': 'off',\n '@typescript-eslint/naming-convention': 'off',\n },\n },\n];\n\n// Export shared utilities for use in other packages\nexport { booleanNameConvention, booleanNameExceptions, booleanNamePrefixes } from './boolean-naming';\n\nexport default config;\n\n/* eslint-enable @typescript-eslint/no-magic-numbers */\n/* eslint-enable @typescript-eslint/naming-convention */\n","/**\n * Combines an array of regex expressions into a single regex expression via the union operator.\n */\nconst concatElementsByRegexUnion = (elements: string[]) =>\n elements.reduce((element, accum, index) => `${accum}${index === 0 ? '' : '|'}${element}`, '');\n\n// Prefixes allowed at the start of a boolean variable/parameter name\nexport const booleanNamePrefixes = [\n 'is',\n 'as',\n 'are',\n 'was',\n 'should',\n 'has',\n 'can',\n 'did',\n 'will',\n 'use',\n 'does',\n 'show',\n 'allow',\n 'enabled',\n 'enable',\n 'disable',\n 'editable',\n 'refetch',\n 'destructive',\n 'hide',\n 'error',\n 'override',\n 'need',\n 'must',\n 'require',\n 'want',\n 'with',\n];\n// Regex for the rest of a boolean variable/parameter name (the part after the prefix)\nconst booleanNameSuffixes = '[A-Z]([A-Za-z]?)+';\n// Exceptions to the rule for allowable boolean variable/parameter names\nconst booleanNameExceptionsList = [\n '^_',\n '_$',\n '[- /?:{}@%]',\n '^[A-Z][a-z]*([A-Z][a-z]*)',\n '^item$',\n '^value$',\n '^condition$',\n '^container$',\n '^included',\n '^center$',\n '^debug$',\n '^concurrent',\n '^animated$',\n '^allow',\n '^visible',\n '^merge$',\n '^ssr$',\n '^multiSelect$',\n 'Shown$',\n '^enumerable$',\n '^configurable$',\n];\n// A singular regex string for the boolean name exceptions (instead of array of expressions)\nexport const booleanNameExceptions = concatElementsByRegexUnion(booleanNameExceptionsList);\n\n// The full boolean naming convetions regex\nexport const booleanNameConvention = new RegExp(\n `${concatElementsByRegexUnion(\n booleanNamePrefixes,\n )}|${booleanNameSuffixes}|${booleanNameExceptions}`,\n).toString();\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seanblonien/eslint-config-base",
3
- "version": "1.0.10",
3
+ "version": "1.0.12",
4
4
  "description": "Sean Blonien's opinionated ESLint config for TypeScript projects",
5
5
  "keywords": [
6
6
  "eslint",
@@ -51,7 +51,6 @@
51
51
  "devDependencies": {
52
52
  "@types/node": "^24.10.4",
53
53
  "eslint": "^9.39.2",
54
- "jiti": "^2.6.1",
55
54
  "tsup": "^8.5.1",
56
55
  "typescript": "^5.9.3",
57
56
  "vitest": "^4.0.16"
@@ -65,7 +64,6 @@
65
64
  "scripts": {
66
65
  "build": "tsup",
67
66
  "clean": "rm -rf dist",
68
- "lint": "eslint . --fix",
69
67
  "test": "vitest run"
70
68
  }
71
69
  }