@2digits/eslint-config 4.8.7 → 4.8.8

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.d.mts CHANGED
@@ -1079,6 +1079,11 @@ interface RuleOptions {
1079
1079
  * @see https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-undefined-types.md#repos-sticky-header
1080
1080
  */
1081
1081
  'jsdoc/no-undefined-types'?: Linter.RuleEntry<JsdocNoUndefinedTypes>;
1082
+ /**
1083
+ * Prefer `@import` tags to inline `import()` statements.
1084
+ * @see https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/prefer-import-tag.md#repos-sticky-header
1085
+ */
1086
+ 'jsdoc/prefer-import-tag'?: Linter.RuleEntry<JsdocPreferImportTag>;
1082
1087
  /**
1083
1088
  * Reports use of `any` or `*` type
1084
1089
  * @see https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/reject-any-type.md#repos-sticky-header
@@ -1204,6 +1209,11 @@ interface RuleOptions {
1204
1209
  * @see https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-template.md#repos-sticky-header
1205
1210
  */
1206
1211
  'jsdoc/require-template'?: Linter.RuleEntry<JsdocRequireTemplate>;
1212
+ /**
1213
+ * Requires a description for `@template` tags
1214
+ * @see https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-template-description.md#repos-sticky-header
1215
+ */
1216
+ 'jsdoc/require-template-description'?: Linter.RuleEntry<[]>;
1207
1217
  /**
1208
1218
  * Requires that throw statements are documented with `@throws` tags.
1209
1219
  * @see https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-throws.md#repos-sticky-header
@@ -1596,7 +1606,7 @@ interface RuleOptions {
1596
1606
  * Disallow missing label references
1597
1607
  * @see https://github.com/eslint/markdown/blob/main/docs/rules/no-missing-label-refs.md
1598
1608
  */
1599
- 'markdown/no-missing-label-refs'?: Linter.RuleEntry<[]>;
1609
+ 'markdown/no-missing-label-refs'?: Linter.RuleEntry<MarkdownNoMissingLabelRefs>;
1600
1610
  /**
1601
1611
  * Disallow link fragments that do not reference valid headings
1602
1612
  * @see https://github.com/eslint/markdown/blob/main/docs/rules/no-missing-link-fragments.md
@@ -1607,6 +1617,11 @@ interface RuleOptions {
1607
1617
  * @see https://github.com/eslint/markdown/blob/main/docs/rules/no-multiple-h1.md
1608
1618
  */
1609
1619
  'markdown/no-multiple-h1'?: Linter.RuleEntry<MarkdownNoMultipleH1>;
1620
+ /**
1621
+ * Disallow URLs that match defined reference identifiers
1622
+ * @see https://github.com/eslint/markdown/blob/main/docs/rules/no-reference-like-urls.md
1623
+ */
1624
+ 'markdown/no-reference-like-urls'?: Linter.RuleEntry<[]>;
1610
1625
  /**
1611
1626
  * Disallow reversed link and image syntax
1612
1627
  * @see https://github.com/eslint/markdown/blob/main/docs/rules/no-reversed-media-syntax.md
@@ -3022,11 +3037,6 @@ interface RuleOptions {
3022
3037
  * Surfaces diagnostics from React Forget
3023
3038
  */
3024
3039
  'react-compiler/react-compiler'?: Linter.RuleEntry<ReactCompilerReactCompiler>;
3025
- /**
3026
- * Disallow `children` in void DOM elements.
3027
- * @see https://eslint-react.xyz/docs/rules/dom-no-void-elements-with-children
3028
- */
3029
- 'react-dom/no-children-in-void-dom-elements'?: Linter.RuleEntry<[]>;
3030
3040
  /**
3031
3041
  * Disallow `dangerouslySetInnerHTML`.
3032
3042
  * @see https://eslint-react.xyz/docs/rules/dom-no-dangerously-set-innerhtml
@@ -3082,6 +3092,11 @@ interface RuleOptions {
3082
3092
  * @see https://eslint-react.xyz/docs/rules/dom-no-script-url
3083
3093
  */
3084
3094
  'react-dom/no-script-url'?: Linter.RuleEntry<[]>;
3095
+ /**
3096
+ * Disallows the use of string style prop.
3097
+ * @see https://eslint-react.xyz/docs/rules/dom-no-string-style-prop
3098
+ */
3099
+ 'react-dom/no-string-style-prop'?: Linter.RuleEntry<[]>;
3085
3100
  /**
3086
3101
  * Disallow unknown `DOM` property.
3087
3102
  * @see https://eslint-react.xyz/docs/rules/dom-no-unknown-property
@@ -3107,26 +3122,16 @@ interface RuleOptions {
3107
3122
  * @see https://eslint-react.xyz/docs/rules/dom-no-void-elements-with-children
3108
3123
  */
3109
3124
  'react-dom/no-void-elements-with-children'?: Linter.RuleEntry<[]>;
3110
- /**
3111
- * Enforces explicit boolean values for boolean attributes.
3112
- * @see https://eslint-react.xyz/docs/rules/avoid-shorthand-boolean
3113
- */
3114
- 'react-extra/avoid-shorthand-boolean'?: Linter.RuleEntry<[]>;
3115
- /**
3116
- * Enforces explicit `<Fragment>` components instead of the shorthand `<>` or `</>` syntax.
3117
- * @see https://eslint-react.xyz/docs/rules/avoid-shorthand-fragment
3118
- */
3119
- 'react-extra/avoid-shorthand-fragment'?: Linter.RuleEntry<[]>;
3120
- /**
3121
- * Disallow useless `forwardRef` calls on components that don't use `ref`s.
3122
- * @see https://eslint-react.xyz/docs/rules/no-useless-forward-ref
3123
- */
3124
- 'react-extra/ensure-forward-ref-using-ref'?: Linter.RuleEntry<[]>;
3125
3125
  /**
3126
3126
  * Enforces that the 'key' attribute is placed before the spread attribute in JSX elements.
3127
3127
  * @see https://eslint-react.xyz/docs/rules/jsx-key-before-spread
3128
3128
  */
3129
3129
  'react-extra/jsx-key-before-spread'?: Linter.RuleEntry<[]>;
3130
+ /**
3131
+ * Prevents comments from being inserted as text nodes.
3132
+ * @see https://eslint-react.xyz/docs/rules/jsx-no-comment-textnodes
3133
+ */
3134
+ 'react-extra/jsx-no-comment-textnodes'?: Linter.RuleEntry<[]>;
3130
3135
  /**
3131
3136
  * Disallow duplicate props in JSX elements.
3132
3137
  * @see https://eslint-react.xyz/docs/rules/jsx-no-duplicate-props
@@ -3142,6 +3147,16 @@ interface RuleOptions {
3142
3147
  * @see https://eslint-react.xyz/docs/rules/jsx-no-undef
3143
3148
  */
3144
3149
  'react-extra/jsx-no-undef'?: Linter.RuleEntry<[]>;
3150
+ /**
3151
+ * Enforces shorthand syntax for boolean attributes.
3152
+ * @see https://eslint-react.xyz/docs/rules/jsx-shorthand-boolean
3153
+ */
3154
+ 'react-extra/jsx-shorthand-boolean'?: Linter.RuleEntry<ReactExtraJsxShorthandBoolean>;
3155
+ /**
3156
+ * Enforces shorthand syntax for fragments.
3157
+ * @see https://eslint-react.xyz/docs/rules/jsx-shorthand-fragment
3158
+ */
3159
+ 'react-extra/jsx-shorthand-fragment'?: Linter.RuleEntry<ReactExtraJsxShorthandFragment>;
3145
3160
  /**
3146
3161
  * Marks React variables as used when JSX is used.
3147
3162
  * @see https://eslint-react.xyz/docs/rules/jsx-uses-react
@@ -3202,21 +3217,6 @@ interface RuleOptions {
3202
3217
  * @see https://eslint-react.xyz/docs/rules/no-clone-element
3203
3218
  */
3204
3219
  'react-extra/no-clone-element'?: Linter.RuleEntry<[]>;
3205
- /**
3206
- * Prevents comments from being inserted as text nodes.
3207
- * @see https://eslint-react.xyz/docs/rules/no-comment-textnodes
3208
- */
3209
- 'react-extra/no-comment-textnodes'?: Linter.RuleEntry<[]>;
3210
- /**
3211
- * Disallow complex conditional rendering in JSX expressions.
3212
- * @see https://eslint-react.xyz/docs/rules/no-complex-conditional-rendering
3213
- */
3214
- 'react-extra/no-complex-conditional-rendering'?: Linter.RuleEntry<[]>;
3215
- /**
3216
- * Disallow complex conditional rendering in JSX expressions.
3217
- * @see https://eslint-react.xyz/docs/rules/no-complex-conditional-rendering
3218
- */
3219
- 'react-extra/no-complicated-conditional-rendering'?: Linter.RuleEntry<[]>;
3220
3220
  /**
3221
3221
  * Replace usages of `componentWillMount` with `UNSAFE_componentWillMount`.
3222
3222
  * @see https://eslint-react.xyz/docs/rules/no-component-will-mount
@@ -3252,16 +3252,16 @@ interface RuleOptions {
3252
3252
  * @see https://eslint-react.xyz/docs/rules/no-direct-mutation-state
3253
3253
  */
3254
3254
  'react-extra/no-direct-mutation-state'?: Linter.RuleEntry<[]>;
3255
- /**
3256
- * Disallow duplicate props in JSX elements.
3257
- * @see https://eslint-react.xyz/docs/rules/jsx-no-duplicate-props
3258
- */
3259
- 'react-extra/no-duplicate-jsx-props'?: Linter.RuleEntry<[]>;
3260
3255
  /**
3261
3256
  * Disallow duplicate `key` on elements in the same array or a list of `children`.
3262
3257
  * @see https://eslint-react.xyz/docs/rules/no-duplicate-key
3263
3258
  */
3264
3259
  'react-extra/no-duplicate-key'?: Linter.RuleEntry<[]>;
3260
+ /**
3261
+ * Disallow certain props on components.
3262
+ * @see https://eslint-react.xyz/docs/rules/no-forbidden-props
3263
+ */
3264
+ 'react-extra/no-forbidden-props'?: Linter.RuleEntry<ReactExtraNoForbiddenProps>;
3265
3265
  /**
3266
3266
  * Replaces usages of `forwardRef` with passing `ref` as a prop.
3267
3267
  * @see https://eslint-react.xyz/docs/rules/no-forward-ref
@@ -3302,11 +3302,6 @@ interface RuleOptions {
3302
3302
  * @see https://eslint-react.xyz/docs/rules/no-nested-component-definitions
3303
3303
  */
3304
3304
  'react-extra/no-nested-component-definitions'?: Linter.RuleEntry<[]>;
3305
- /**
3306
- * Disallow nesting component definitions inside other components.
3307
- * @see https://eslint-react.xyz/docs/rules/no-nested-component-definitions
3308
- */
3309
- 'react-extra/no-nested-components'?: Linter.RuleEntry<[]>;
3310
3305
  /**
3311
3306
  * Disallow nesting lazy component declarations inside other components.
3312
3307
  * @see https://eslint-react.xyz/docs/rules/no-nested-lazy-component-declarations
@@ -3342,6 +3337,26 @@ interface RuleOptions {
3342
3337
  * @see https://eslint-react.xyz/docs/rules/no-string-refs
3343
3338
  */
3344
3339
  'react-extra/no-string-refs'?: Linter.RuleEntry<[]>;
3340
+ /**
3341
+ * Prevents the use of unnecessary `key` props on JSX elements when rendering lists.
3342
+ * @see https://eslint-react.xyz/docs/rules/no-unnecessary-key
3343
+ */
3344
+ 'react-extra/no-unnecessary-key'?: Linter.RuleEntry<[]>;
3345
+ /**
3346
+ * Disallow unnecessary usage of `useCallback`.
3347
+ * @see https://eslint-react.xyz/docs/rules/no-unnecessary-use-callback
3348
+ */
3349
+ 'react-extra/no-unnecessary-use-callback'?: Linter.RuleEntry<[]>;
3350
+ /**
3351
+ * Disallow unnecessary usage of `useMemo`.
3352
+ * @see https://eslint-react.xyz/docs/rules/no-unnecessary-use-memo
3353
+ */
3354
+ 'react-extra/no-unnecessary-use-memo'?: Linter.RuleEntry<[]>;
3355
+ /**
3356
+ * Enforces that a function with the `use` prefix should use at least one Hook inside of it.
3357
+ * @see https://eslint-react.xyz/docs/rules/no-unnecessary-use-prefix
3358
+ */
3359
+ 'react-extra/no-unnecessary-use-prefix'?: Linter.RuleEntry<[]>;
3345
3360
  /**
3346
3361
  * Warns the usage of `UNSAFE_componentWillMount` in class components.
3347
3362
  * @see https://eslint-react.xyz/docs/rules/no-unsafe-component-will-mount
@@ -3372,6 +3387,11 @@ interface RuleOptions {
3372
3387
  * @see https://eslint-react.xyz/docs/rules/no-unused-class-component-members
3373
3388
  */
3374
3389
  'react-extra/no-unused-class-component-members'?: Linter.RuleEntry<[]>;
3390
+ /**
3391
+ * Warns about unused component prop declarations.
3392
+ * @see https://eslint-react.xyz/docs/rules/no-unused-props
3393
+ */
3394
+ 'react-extra/no-unused-props'?: Linter.RuleEntry<[]>;
3375
3395
  /**
3376
3396
  * Warns unused class component state.
3377
3397
  * @see https://eslint-react.xyz/docs/rules/no-unused-state
@@ -3399,84 +3419,24 @@ interface RuleOptions {
3399
3419
  'react-extra/prefer-destructuring-assignment'?: Linter.RuleEntry<[]>;
3400
3420
  /**
3401
3421
  * Enforces React is imported via a namespace import.
3402
- * @see https://eslint-react.xyz/docs/rules/prefer-react-namespace-import
3422
+ * @see https://eslint-react.xyz/docs/rules/prefer-namespace-import
3403
3423
  */
3404
- 'react-extra/prefer-react-namespace-import'?: Linter.RuleEntry<[]>;
3424
+ 'react-extra/prefer-namespace-import'?: Linter.RuleEntry<[]>;
3405
3425
  /**
3406
3426
  * Enforces read-only props in components.
3407
3427
  * @see https://eslint-react.xyz/docs/rules/prefer-read-only-props
3408
3428
  */
3409
3429
  'react-extra/prefer-read-only-props'?: Linter.RuleEntry<[]>;
3410
3430
  /**
3411
- * Enforces shorthand syntax for boolean attributes.
3412
- * @see https://eslint-react.xyz/docs/rules/prefer-shorthand-boolean
3413
- */
3414
- 'react-extra/prefer-shorthand-boolean'?: Linter.RuleEntry<[]>;
3415
- /**
3416
- * Enforces shorthand syntax for fragments.
3417
- * @see https://eslint-react.xyz/docs/rules/prefer-shorthand-fragment
3418
- */
3419
- 'react-extra/prefer-shorthand-fragment'?: Linter.RuleEntry<[]>;
3420
- /**
3421
- * Marks variables used in JSX elements as used.
3422
- * @see https://eslint-react.xyz/docs/rules/jsx-uses-vars
3423
- */
3424
- 'react-extra/use-jsx-vars'?: Linter.RuleEntry<[]>;
3425
- /**
3426
- * Enforces that a function with the `use` prefix should use at least one Hook inside of it.
3427
- * @see https://eslint-react.xyz/docs/rules/hooks-extra-no-unnecessary-use-prefix
3428
- */
3429
- 'react-hooks-extra/ensure-custom-hooks-using-other-hooks'?: Linter.RuleEntry<[]>;
3430
- /**
3431
- * Disallow unnecessary usage of `useCallback`.
3432
- * @see https://eslint-react.xyz/docs/rules/hooks-extra-no-unnecessary-use-callback
3433
- */
3434
- 'react-hooks-extra/ensure-use-callback-has-non-empty-deps'?: Linter.RuleEntry<[]>;
3435
- /**
3436
- * Disallow unnecessary usage of `useMemo`.
3437
- * @see https://eslint-react.xyz/docs/rules/hooks-extra-no-unnecessary-use-memo
3431
+ * Enforces function calls made inside `useState` to be wrapped in an `initializer function`.
3432
+ * @see https://eslint-react.xyz/docs/rules/prefer-use-state-lazy-initialization
3438
3433
  */
3439
- 'react-hooks-extra/ensure-use-memo-has-non-empty-deps'?: Linter.RuleEntry<[]>;
3434
+ 'react-extra/prefer-use-state-lazy-initialization'?: Linter.RuleEntry<[]>;
3440
3435
  /**
3441
3436
  * Disallow direct calls to the `set` function of `useState` in `useEffect`.
3442
3437
  * @see https://eslint-react.xyz/docs/rules/hooks-extra-no-direct-set-state-in-use-effect
3443
3438
  */
3444
3439
  'react-hooks-extra/no-direct-set-state-in-use-effect'?: Linter.RuleEntry<[]>;
3445
- /**
3446
- * Disallow direct calls to the `set` function of `useState` in `useLayoutEffect`.
3447
- * @see https://eslint-react.xyz/docs/rules/hooks-extra-no-direct-set-state-in-use-layout-effect
3448
- */
3449
- 'react-hooks-extra/no-direct-set-state-in-use-layout-effect'?: Linter.RuleEntry<[]>;
3450
- /**
3451
- * Enforces that a function with the `use` prefix should use at least one Hook inside of it.
3452
- * @see https://eslint-react.xyz/docs/rules/hooks-extra-no-unnecessary-use-prefix
3453
- */
3454
- 'react-hooks-extra/no-redundant-custom-hook'?: Linter.RuleEntry<[]>;
3455
- /**
3456
- * Disallow unnecessary usage of `useCallback`.
3457
- * @see https://eslint-react.xyz/docs/rules/hooks-extra-no-unnecessary-use-callback
3458
- */
3459
- 'react-hooks-extra/no-unnecessary-use-callback'?: Linter.RuleEntry<[]>;
3460
- /**
3461
- * Disallow unnecessary usage of `useMemo`.
3462
- * @see https://eslint-react.xyz/docs/rules/hooks-extra-no-unnecessary-use-memo
3463
- */
3464
- 'react-hooks-extra/no-unnecessary-use-memo'?: Linter.RuleEntry<[]>;
3465
- /**
3466
- * Enforces that a function with the `use` prefix should use at least one Hook inside of it.
3467
- * @see https://eslint-react.xyz/docs/rules/hooks-extra-no-unnecessary-use-prefix
3468
- */
3469
- 'react-hooks-extra/no-unnecessary-use-prefix'?: Linter.RuleEntry<[]>;
3470
- /**
3471
- * Enforces that a function with the `use` prefix should use at least one Hook inside of it.
3472
- * @see https://eslint-react.xyz/docs/rules/hooks-extra-no-unnecessary-use-prefix
3473
- */
3474
- 'react-hooks-extra/no-useless-custom-hooks'?: Linter.RuleEntry<[]>;
3475
- /**
3476
- * Enforces function calls made inside `useState` to be wrapped in an `initializer function`.
3477
- * @see https://eslint-react.xyz/docs/rules/hooks-extra-prefer-use-state-lazy-initialization
3478
- */
3479
- 'react-hooks-extra/prefer-use-state-lazy-initialization'?: Linter.RuleEntry<[]>;
3480
3440
  /**
3481
3441
  * verifies the list of dependencies for Hooks like useEffect and similar
3482
3442
  * @see https://github.com/facebook/react/issues/14920
@@ -8226,6 +8186,7 @@ type JsdocCheckPropertyNames = [] | [{
8226
8186
  type JsdocCheckTagNames = [] | [{
8227
8187
  definedTags?: string[];
8228
8188
  enableFixer?: boolean;
8189
+ inlineTags?: string[];
8229
8190
  jsxTags?: boolean;
8230
8191
  typed?: boolean;
8231
8192
  }];
@@ -8384,10 +8345,17 @@ type JsdocNoTypes = [] | [{
8384
8345
  }];
8385
8346
  // ----- jsdoc/no-undefined-types -----
8386
8347
  type JsdocNoUndefinedTypes = [] | [{
8348
+ checkUsedTypedefs?: boolean;
8387
8349
  definedTypes?: string[];
8388
8350
  disableReporting?: boolean;
8389
8351
  markVariablesAsUsed?: boolean;
8390
8352
  }];
8353
+ // ----- jsdoc/prefer-import-tag -----
8354
+ type JsdocPreferImportTag = [] | [{
8355
+ enableFixer?: boolean;
8356
+ exemptTypedefs?: boolean;
8357
+ outputType?: ("named-import" | "namespaced-import");
8358
+ }];
8391
8359
  // ----- jsdoc/require-asterisk-prefix -----
8392
8360
  type JsdocRequireAsteriskPrefix = [] | [("always" | "never" | "any")] | [("always" | "never" | "any"), {
8393
8361
  tags?: {
@@ -9338,6 +9306,10 @@ type MarkdownNoHtml = [] | [{
9338
9306
  type MarkdownNoMissingAtxHeadingSpace = [] | [{
9339
9307
  checkClosedHeadings?: boolean;
9340
9308
  }];
9309
+ // ----- markdown/no-missing-label-refs -----
9310
+ type MarkdownNoMissingLabelRefs = [] | [{
9311
+ allowLabels?: string[];
9312
+ }];
9341
9313
  // ----- markdown/no-missing-link-fragments -----
9342
9314
  type MarkdownNoMissingLinkFragments = [] | [{
9343
9315
  ignoreCase?: boolean;
@@ -10256,6 +10228,7 @@ type PnpmJsonEnforceCatalog = [] | [{
10256
10228
  reuseExistingCatalog?: boolean;
10257
10229
  conflicts?: ("new-catalog" | "overrides" | "error");
10258
10230
  fields?: string[];
10231
+ ignores?: string[];
10259
10232
  }];
10260
10233
  // ----- pnpm/json-prefer-workspace-settings -----
10261
10234
  type PnpmJsonPreferWorkspaceSettings = [] | [{
@@ -10349,6 +10322,21 @@ type ReactDomNoUnknownProperty = [] | [{
10349
10322
  ignore?: string[];
10350
10323
  requireDataLowercase?: boolean;
10351
10324
  }];
10325
+ // ----- react-extra/jsx-shorthand-boolean -----
10326
+ type ReactExtraJsxShorthandBoolean = [] | [(-1 | 1)];
10327
+ // ----- react-extra/jsx-shorthand-fragment -----
10328
+ type ReactExtraJsxShorthandFragment = [] | [(-1 | 1)];
10329
+ // ----- react-extra/no-forbidden-props -----
10330
+ type ReactExtraNoForbiddenProps = [] | [{
10331
+ forbid?: (string | {
10332
+ excludedNodes?: string[];
10333
+ prop: string;
10334
+ } | {
10335
+ includedNodes?: string[];
10336
+ prop: string;
10337
+ })[];
10338
+ [k: string]: unknown | undefined;
10339
+ }];
10352
10340
  // ----- react-extra/no-useless-fragment -----
10353
10341
  type ReactExtraNoUselessFragment = [] | [{
10354
10342
  allowExpressions?: boolean;
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import{FlatConfigComposer as e,renamePluginsInConfigs as t,renamePluginsInRules as n}from"eslint-flat-config-utils";import{findUp as r}from"find-up";import{getPackageInfo as i,isPackageExists as a}from"local-pkg";import o from"eslint-plugin-antfu";import s from"eslint-plugin-de-morgan";import c from"@eslint-community/eslint-plugin-eslint-comments";import l from"@eslint-community/eslint-plugin-eslint-comments/configs";import u from"@eslint/css";import{tailwind3 as d,tailwind4 as f}from"tailwind-csstree";import{fixupPluginRules as p}from"@eslint/compat";import m from"eslint-plugin-github-action";import h from"yaml-eslint-parser";import g from"eslint-config-flat-gitignore";import ee from"@eslint/js";import te from"@stylistic/eslint-plugin";import _ from"globals";import ne from"eslint-plugin-jsdoc";import re,{configs as v}from"eslint-plugin-jsonc";import ie from"jsonc-eslint-parser";import y from"@eslint/markdown";import{mergeProcessors as ae,processorPassThrough as oe}from"eslint-merge-processors";import b from"eslint-plugin-n";import x from"eslint-plugin-regexp";import se from"eslint-plugin-sonarjs";import S from"eslint-plugin-unicorn";import ce from"eslint-plugin-yml";const C=`**/*.?([cm])[jt]s?(x)`,w=`**/*.?([cm])ts`,T=`**/*.?([cm])tsx`,E=`.github/workflows/*.y?(a)ml`,D=`**/*.md`,O=`${D}/${C}`,k=`**/node_modules,**/dist,**/package-lock.json,**/yarn.lock,**/pnpm-lock.yaml,**/bun.lockb,**/bun.lock,**/output,**/coverage,**/temp,**/.temp,**/tmp,**/.tmp,**/.history,**/.vitepress/cache,**/.nuxt,**/.next,**/.vercel,**/.changeset,**/.idea,**/.cache,**/.output,**/.vite-inspect,**/.yarn,**/CHANGELOG*.md,**/*.min.*,**/LICENSE*,**/__snapshots__,**/auto-import?(s).d.ts,**/components.d.ts`.split(`,`);function A(){return[{files:[C],name:`2digits:antfu`,plugins:{antfu:o},rules:{"antfu/if-newline":`error`,"antfu/top-level-function":`error`}}]}function j(){return[{files:[C],name:`2digits:boolean`,plugins:{boolean:s},rules:{...s.configs.recommended.rules}}]}const M={"@next/next":`next`,"@eslint-react/naming-convention":`react-naming-convention`,"@eslint-react/hooks-extra":`react-hooks-extra`,"@eslint-react/dom":`react-dom`,"@eslint-react/web-api":`react-web-api`,"@eslint-react":`react-extra`,"react-hooks":`react-hooks`,"react-compiler":`react-compiler`,"@stylistic/eslint-plugin":`stylistic`,"@typescript-eslint":`ts`,node:`node`,"@eslint-community/eslint-comments":`comments`,storybook:`storybook`,turbo:`turbo`,jsdoc:`jsdoc`,unicorn:`unicorn`,tailwindcss:`tailwindcss`,"@tanstack/query":`tanstack`,"@2digits":`@2digits`,"@graphql-eslint":`gql`,sonarjs:`sonar`,drizzle:`drizzle`,"de-morgan":`boolean`},N=n(l.recommended.rules,M);function P(){return[{files:[C],name:`2digits:comments`,plugins:{comments:c},rules:{...N,"comments/no-unused-disable":`error`,"comments/disable-enable-pair":[`error`,{allowWholeFile:!0}]}}]}async function F(e){if(e?.customSyntax)return e.customSyntax;if(e?.tailwindMajor===3)return d;if(e?.tailwindMajor===4)return f;try{let e=(await i(`tailwindcss`))?.version??``,t=Number.parseInt(e.split(`.`)[0]||`0`,10);if(Number.isFinite(t)&&t>=4)return f}catch{}return d}async function I(e={}){let t=await F(e);return[{name:`2digits:css`,files:[`**/*.css`],language:`css/css`,plugins:{css:u},languageOptions:{tolerant:!0,customSyntax:t},rules:{...u.configs.recommended.rules,...e.overrides}}]}async function L(e){let t=await e;return t.default||t}async function R(e={}){let{overrides:t={},drizzleObjectName:n=[`drizzle`,`db`]}=e,r=await L(import(`eslint-plugin-drizzle`));return[{files:[C],name:`2digits:drizzle`,plugins:{drizzle:p(r)},rules:{"drizzle/enforce-update-with-where":[`error`,{drizzleObjectName:n}],"drizzle/enforce-delete-with-where":[`error`,{drizzleObjectName:n}],...t}}]}const z=Object.fromEntries(m.configs.recommended.flatMap(({rules:e})=>Object.entries({...e})));function B(){return[{name:`2digits:github-actions/setup`,plugins:{"github-action":m}},{name:`2digits:github-actions/recommended`,files:[E],ignores:[`!**/${E}`],languageOptions:{parser:h},rules:{...z}}]}async function V(e={}){let{overrides:t={},files:r=[`**/*.graphql`,`**/*.gql`]}=e,[i,a]=await Promise.all([L(import(`@graphql-eslint/eslint-plugin`)),import(`graphql-config`).then(({loadConfig:e})=>e({throwOnEmpty:!1,throwOnMissing:!1}).then(e=>e?.getDefault().schema))]),o=i.configs[`flat/operations-recommended`].rules,s={};if(a)s=o;else for(let e of Object.keys(o)){let t=e.replace(`@graphql-eslint/`,``);if(t in i.rules&&(i.rules[t].meta.docs?.requiresSchema||i.rules[t].meta.docs?.requiresSiblings))continue;s[e]=o[e]}let c=n(s,M);return[{name:`2digits:graphql`,plugins:{gql:i},languageOptions:{parser:i.parser},files:r,rules:{...c,"gql/naming-convention":[`error`,{allowLeadingUnderscore:!0}],...t}}]}function H(e={}){let{gitIgnore:t,ignores:n=[]}=e;return[{ignores:[k,n].flat(),name:`2digits:ignores`},g({strict:!1,...t,name:`2digits:gitignore`})]}function U(e={}){let{overrides:t={}}=e;return[{files:[C],name:`2digits:javascript`,plugins:{stylistic:te},languageOptions:{ecmaVersion:2022,globals:{..._.browser,..._.es2021,..._.node,document:`readonly`,navigator:`readonly`,window:`readonly`},parserOptions:{ecmaFeatures:{jsx:!0},ecmaVersion:2022,sourceType:`module`},sourceType:`module`},linterOptions:{reportUnusedDisableDirectives:!0},rules:{...ee.configs.recommended.rules,"accessor-pairs":[`error`,{enforceForClassMembers:!0,setWithoutGet:!0}],"array-callback-return":`error`,"block-scoped-var":`error`,"constructor-super":`error`,"default-case-last":`error`,"dot-notation":[`error`,{allowKeywords:!0}],eqeqeq:[`error`,`smart`],"new-cap":[`error`,{capIsNew:!1,newIsCap:!0,properties:!0}],"no-alert":`error`,"no-array-constructor":`error`,"no-async-promise-executor":`error`,"no-caller":`error`,"no-case-declarations":`error`,"no-class-assign":`error`,"no-compare-neg-zero":`error`,"no-cond-assign":[`error`,`always`],"no-const-assign":`error`,"no-control-regex":`error`,"no-debugger":`error`,"no-delete-var":`error`,"no-dupe-args":`error`,"no-dupe-class-members":`error`,"no-dupe-keys":`error`,"no-duplicate-case":`error`,"no-empty":[`error`,{allowEmptyCatch:!0}],"no-empty-character-class":`error`,"no-empty-pattern":`error`,"no-eval":`error`,"no-ex-assign":`error`,"no-extend-native":`error`,"no-extra-bind":`error`,"no-extra-boolean-cast":`error`,"no-fallthrough":`error`,"no-func-assign":`error`,"no-global-assign":`error`,"no-implied-eval":`error`,"no-import-assign":`error`,"no-invalid-regexp":`error`,"no-irregular-whitespace":`error`,"no-iterator":`error`,"no-labels":[`error`,{allowLoop:!1,allowSwitch:!1}],"no-lone-blocks":`error`,"no-loss-of-precision":`error`,"no-misleading-character-class":`error`,"no-multi-str":`error`,"no-new":`error`,"no-new-func":`error`,"no-new-native-nonconstructor":`error`,"no-new-wrappers":`error`,"no-obj-calls":`error`,"no-octal":`error`,"no-octal-escape":`error`,"no-proto":`error`,"no-prototype-builtins":`error`,"no-redeclare":[`error`,{builtinGlobals:!1}],"no-regex-spaces":`error`,"no-restricted-globals":[`error`,{message:"Use `globalThis` instead.",name:`global`},{message:"Use `globalThis` instead.",name:`self`}],"no-restricted-properties":[`error`,{message:"Use `Object.getPrototypeOf` or `Object.setPrototypeOf` instead.",property:`__proto__`},{message:"Use `Object.defineProperty` instead.",property:`__defineGetter__`},{message:"Use `Object.defineProperty` instead.",property:`__defineSetter__`},{message:"Use `Object.getOwnPropertyDescriptor` instead.",property:`__lookupGetter__`},{message:"Use `Object.getOwnPropertyDescriptor` instead.",property:`__lookupSetter__`}],"no-restricted-syntax":[`error`,`DebuggerStatement`,`LabeledStatement`,`WithStatement`,`TSEnumDeclaration`,`TSExportAssignment`],"no-self-assign":[`error`,{props:!0}],"no-self-compare":`error`,"no-sequences":`error`,"no-shadow-restricted-names":`error`,"no-sparse-arrays":`error`,"no-template-curly-in-string":`error`,"no-this-before-super":`error`,"no-throw-literal":`error`,"no-undef":`error`,"no-undef-init":`error`,"no-unexpected-multiline":`error`,"no-unmodified-loop-condition":`error`,"no-unneeded-ternary":[`error`,{defaultAssignment:!1}],"no-unreachable":`error`,"no-unreachable-loop":`error`,"no-unsafe-finally":`error`,"no-unsafe-negation":`error`,"no-unused-expressions":[`error`,{allowShortCircuit:!0,allowTaggedTemplates:!0,allowTernary:!0}],"no-unused-vars":[`error`,{args:`none`,caughtErrors:`none`,ignoreRestSiblings:!0,vars:`all`}],"no-useless-backreference":`error`,"no-useless-call":`error`,"no-useless-catch":`error`,"no-useless-computed-key":`error`,"no-useless-constructor":`error`,"no-useless-rename":`error`,"no-var":`error`,"no-with":`error`,"object-shorthand":[`error`,`always`,{avoidQuotes:!0,ignoreConstructors:!1}],"one-var":[`error`,{initialized:`never`}],"prefer-arrow-callback":[`error`,{allowNamedFunctions:!0,allowUnboundThis:!0}],"prefer-const":[`error`,{destructuring:`all`,ignoreReadBeforeAssign:!0}],"prefer-exponentiation-operator":`error`,"prefer-promise-reject-errors":`error`,"prefer-regex-literals":[`error`,{disallowRedundantWrapping:!0}],"prefer-rest-params":`error`,"prefer-spread":`error`,"prefer-template":`error`,"symbol-description":`error`,"unicode-bom":[`error`,`never`],"use-isnan":[`error`,{enforceForIndexOf:!0,enforceForSwitchCase:!0}],"valid-typeof":[`error`,{requireStringLiterals:!0}],"vars-on-top":`error`,yoda:[`error`,`never`],"stylistic/padding-line-between-statements":[`error`,{blankLine:`always`,prev:[`const`,`let`],next:`*`},{blankLine:`any`,prev:[`const`,`let`],next:[`const`,`let`]},{blankLine:`always`,prev:`*`,next:`return`}],...t}}]}function W(){return[{files:[C],name:`2digits:jsdoc`,plugins:{jsdoc:ne},rules:{"jsdoc/check-access":`error`,"jsdoc/check-param-names":`error`,"jsdoc/check-property-names":`error`,"jsdoc/check-types":`error`,"jsdoc/empty-tags":`error`,"jsdoc/implements-on-classes":`error`,"jsdoc/no-defaults":`error`,"jsdoc/no-multi-asterisks":`error`,"jsdoc/require-param-name":`error`,"jsdoc/require-property":`error`,"jsdoc/require-property-description":`error`,"jsdoc/require-property-name":`error`,"jsdoc/require-returns-check":`error`,"jsdoc/require-returns-description":`error`,"jsdoc/require-yields-check":`error`}}]}function G(){return[...v[`flat/base`].map(e=>({...e,name:`2digits:jsonc/base`})),{name:`2digits:jsonc/json`,files:[`**/*.json`],...K,rules:{...q(v[`flat/recommended-with-json`])}},{name:`2digits:jsonc/jsonc`,files:[`**/*.jsonc`],...K,rules:{...q(v[`flat/recommended-with-jsonc`])}},{name:`2digits:jsonc/json5`,files:[`**/*.json5`],...K,rules:{...q(v[`flat/recommended-with-json5`])}},{name:`2digits:jsonc/package.json`,...K,files:[`**/package.json`],rules:{"jsonc/sort-array-values":[`error`,{order:{type:`asc`},pathPattern:`^files$`}],"jsonc/sort-keys":[`error`,{order:`$schema.publisher.name.displayName.version.private.description.funding.homepage.repository.bugs.categories.type.main.module.types.typesVersions.bin.files.exports.icon.unpkg.jsdelivr.sideEffects.activationEvents.contributes.scripts.keywords.author.license.workspaces.dependencies.devDependencies.peerDependencies.peerDependenciesMeta.optionalDependencies.packageManager.engines.pnpm.overrides.resolutions.husky.simple-git-hooks.lint-staged.eslintConfig.prettier`.split(`.`),pathPattern:`^$`},{order:{type:`asc`},pathPattern:`^(?:dev|peer|optional|bundled)?[Dd]ependencies(Meta)?$`},{order:[`types`,`import`,`module`,`require`,`default`],pathPattern:`^exports.*$`}]}},{name:`2digits:jsonc/tsconfig.json`,...K,files:[`**/tsconfig.json`,`**/tsconfig.*.json`,`**/tsconfig-*.json`,`**/jsconfig.json`,`**/jsconfig.*.json`,`**/jsconfig-*.json`],rules:{"jsonc/sort-keys":[`error`,{order:[`$schema`,`extends`,`compilerOptions`,`references`,`files`,`include`,`exclude`],pathPattern:`^$`},{order:`incremental.composite.tsBuildInfoFile.disableSourceOfProjectReferenceRedirect.disableSolutionSearching.disableReferencedProjectLoad.target.lib.jsx.experimentalDecorators.emitDecoratorMetadata.jsxFactory.jsxFragmentFactory.jsxImportSource.reactNamespace.noLib.useDefineForClassFields.moduleDetection.module.rootDir.moduleResolution.baseUrl.paths.rootDirs.typeRoots.types.allowUmdGlobalAccess.moduleSuffixes.allowImportingTsExtensions.resolvePackageJsonExports.resolvePackageJsonImports.customConditions.resolveJsonModule.allowArbitraryExtensions.noResolve.allowJs.checkJs.maxNodeModuleJsDepth.declaration.declarationMap.emitDeclarationOnly.sourceMap.inlineSourceMap.outFile.outDir.removeComments.noEmit.importHelpers.importsNotUsedAsValues.downlevelIteration.sourceRoot.mapRoot.inlineSources.emitBOM.newLine.stripInternal.noEmitHelpers.noEmitOnError.preserveConstEnums.declarationDir.preserveValueImports.isolatedModules.verbatimModuleSyntax.allowSyntheticDefaultImports.esModuleInterop.preserveSymlinks.forceConsistentCasingInFileNames.strict.strictBindCallApply.strictFunctionTypes.strictNullChecks.strictPropertyInitialization.allowUnreachableCode.allowUnusedLabels.alwaysStrict.exactOptionalPropertyTypes.noFallthroughCasesInSwitch.noImplicitAny.noImplicitOverride.noImplicitReturns.noImplicitThis.noPropertyAccessFromIndexSignature.noUncheckedIndexedAccess.noUnusedLocals.noUnusedParameters.useUnknownInCatchVariables.skipDefaultLibCheck.skipLibCheck`.split(`.`),pathPattern:`^compilerOptions$`}]}},...v[`flat/prettier`].map(e=>({...e,name:`2digits:jsonc/prettier`}))]}const K={languageOptions:{parser:ie},plugins:{jsonc:re}};function q(e){return Object.fromEntries(e.flatMap(({rules:e})=>Object.entries(e??{})))}const J=[D];function le(){return[{name:`2digits:markdown/setup`,plugins:{markdown:y}},{name:`2digits:markdown/processor`,files:J,language:`markdown/gfm`,ignores:[`**/*.md/*.md`],processor:ae([y.processors.markdown,oe])},{name:`2digits:markdown/parser`,files:J,language:`markdown/gfm`,languageOptions:{parser:ue}},{name:`2digits:markdown/rules`,files:J,language:`markdown/gfm`,rules:{"markdown/fenced-code-language":`error`,"markdown/heading-increment":`error`,"markdown/no-empty-links":`error`,"markdown/no-invalid-label-refs":`error`,"markdown/no-missing-label-refs":`error`}},{name:`2digits:markdown/disables`,files:[O],languageOptions:{parserOptions:{ecmaFeatures:{impliedStrict:!0}}},rules:{"no-alert":`off`,"no-console":`off`,"no-labels":`off`,"no-lone-blocks":`off`,"no-restricted-syntax":`off`,"no-undef":`off`,"no-unused-expressions":`off`,"no-unused-labels":`off`,"no-unused-vars":`off`,"node/prefer-global/process":`off`,"ts/consistent-type-imports":`off`,"ts/explicit-function-return-type":`off`,"ts/no-namespace":`off`,"ts/no-redeclare":`off`,"ts/no-require-imports":`off`,"ts/no-unused-expressions":`off`,"ts/no-unused-vars":`off`,"ts/no-use-before-define":`off`,"unicode-bom":`off`}}]}const ue={meta:{name:`parser-plain`},parseForESLint:e=>({ast:{body:[],comments:[],loc:{end:e.length,start:0},range:[0,e.length],tokens:[],type:`Program`},scopeManager:null,services:{isPlain:!0},visitorKeys:{Program:[]}})};async function de(e={}){let{files:t=[w,T],overrides:r={},parserOptions:i}=e,[a,o]=await Promise.all([L(import(`@next/eslint-plugin-next`)),L(import(`@typescript-eslint/parser`))]),s=n({...a.configs.recommended.rules,...a.configs[`core-web-vitals`].rules},M);return[{name:`2digits:next/setup`,plugins:{next:p(a)}},{name:`2digits:next/rules`,files:t,languageOptions:{parser:o,parserOptions:{ecmaFeatures:{jsx:!0},projectService:!0,...i},sourceType:`module`},rules:{...s,"next/no-html-link-for-pages":`off`,...r}}]}function fe(){return[{files:[C],name:`2digits:node`,settings:{node:{version:`>= 22.0.0`}},plugins:{node:b},rules:{"node/handle-callback-err":[`error`,`^(err|error)$`],"node/no-deprecated-api":`error`,"node/no-exports-assign":`error`,"node/no-new-require":`error`,"node/no-path-concat":`error`,"node/no-unsupported-features/node-builtins":[`error`,{allowExperimental:!0}],"node/prefer-global/buffer":`error`,"node/prefer-global/process":`error`,"node/prefer-global/text-encoder":`error`,"node/prefer-global/url":`error`,"node/prefer-global/console":`error`,"node/prefer-global/url-search-params":`error`,"node/prefer-global/text-decoder":`error`,"node/process-exit-as-throw":`error`}}]}async function pe(){let e=await L(import(`eslint-plugin-pnpm`));return[{name:`2digits:pnpm/package-json`,files:[`**/package.json`],languageOptions:{parser:await L(import(`jsonc-eslint-parser`))},plugins:{pnpm:e},rules:{"pnpm/json-enforce-catalog":`error`,"pnpm/json-prefer-workspace-settings":`error`,"pnpm/json-valid-catalog":`error`}},{name:`2digits:pnpm/pnpm-workspace-yaml`,files:[`pnpm-workspace.yaml`],languageOptions:{parser:await L(import(`yaml-eslint-parser`))},plugins:{pnpm:e},rules:{"pnpm/yaml-no-duplicate-catalog-item":`error`,"pnpm/yaml-no-unused-catalog-item":`error`}}]}async function me(){let[e,t]=await Promise.all([L(import(`eslint-config-prettier`)),L(import(`@stylistic/eslint-plugin`))]);return[{name:`2digits:prettier`,plugins:{stylistic:t},rules:{...e.rules,"tailwindcss/classnames-order":`off`,"stylistic/jsx-newline":[`error`,{prevent:!1}]}}]}async function he(e={}){let{files:t=[w,T],overrides:r={},parserOptions:i,tsconfigRootDir:a,reactCompiler:o=!0}=e,[s,c,l,u,d]=await Promise.all([L(import(`@eslint-react/eslint-plugin`)),L(import(`eslint-plugin-react-hooks`)),L(import(`@typescript-eslint/parser`)),o?L(import(`eslint-plugin-react-compiler`)):Promise.resolve(void 0),L(import(`@stylistic/eslint-plugin`))]),f=s.configs.all.plugins,p=n({...c.configs[`recommended-latest`].rules,...s.configs[`recommended-type-checked`].rules},M);return[{name:`2digits:react/setup`,plugins:{stylistic:d,"react-dom":f[`@eslint-react/dom`],"react-web-api":f[`@eslint-react/web-api`],"react-extra":f[`@eslint-react`],"react-hooks":c,"react-hooks-extra":f[`@eslint-react/hooks-extra`],"react-naming-convention":f[`@eslint-react/naming-convention`],...o?{"react-compiler":u}:{}},settings:{react:{version:`detect`}}},{name:`2digits:react/rules`,files:t,languageOptions:{parser:l,parserOptions:{ecmaFeatures:{jsx:!0},tsconfigRootDir:a,projectService:!0,...i},sourceType:`module`},rules:{...p,...o?{"react-compiler/react-compiler":`error`}:{},"react-hooks-extra/no-unnecessary-use-callback":`error`,"react-hooks-extra/prefer-use-state-lazy-initialization":`error`,"react-hooks-extra/no-redundant-custom-hook":`error`,"react-hooks-extra/no-unnecessary-use-memo":`error`,"react-extra/no-useless-fragment":`off`,"react-extra/prefer-read-only-props":`off`,"react-extra/prefer-shorthand-boolean":`error`,"react-extra/prefer-shorthand-fragment":`error`,"react-extra/prefer-react-namespace-import":`error`,"react-naming-convention/use-state":`error`,"stylistic/jsx-curly-newline":`off`,"stylistic/jsx-newline":[`error`,{prevent:!1}],"stylistic/jsx-self-closing-comp":`error`,...r}}]}function ge(){return[{files:[C],name:`2digits:regexp`,plugins:{regexp:x},rules:{...x.configs[`flat/recommended`].rules}}]}function _e(){return[{files:[C],name:`2digits:sonar`,plugins:{sonar:se},rules:{"sonar/code-eval":`error`,"sonar/cognitive-complexity":`error`,"sonar/comma-or-logical-or-case":`error`,"sonar/concise-regex":`error`,"sonar/confidential-information-logging":`error`,"sonar/constructor-for-side-effects":`error`,"sonar/content-length":`error`,"sonar/content-security-policy":`error`,"sonar/cookie-no-httponly":`error`,"sonar/cors":`error`,"sonar/csrf":`error`,"sonar/max-switch-cases":`error`,"sonar/no-all-duplicated-branches":`error`,"sonar/no-collapsible-if":`error`,"sonar/no-collection-size-mischeck":`error`,"sonar/no-duplicate-string":[`error`,{threshold:5}],"sonar/no-duplicated-branches":`error`,"sonar/no-element-overwrite":`error`,"sonar/no-empty-collection":`error`,"sonar/no-extra-arguments":`error`,"sonar/no-for-in-iterable":`error`,"sonar/no-gratuitous-expressions":`error`,"sonar/no-identical-conditions":`error`,"sonar/no-identical-expressions":`error`,"sonar/no-identical-functions":`error`,"sonar/no-ignored-return":`error`,"sonar/no-inverted-boolean-check":`error`,"sonar/no-nested-switch":`error`,"sonar/no-nested-template-literals":`error`,"sonar/no-redundant-boolean":`error`,"sonar/no-same-line-conditional":`error`,"sonar/no-small-switch":`error`,"sonar/no-unused-collection":`error`,"sonar/no-use-of-empty-return-value":`error`,"sonar/no-useless-catch":`error`,"sonar/non-existent-operator":`error`,"sonar/prefer-immediate-return":`error`,"sonar/prefer-object-literal":`error`,"sonar/prefer-single-boolean-return":`error`,"sonar/prefer-while":`error`,"sonar/elseif-without-else":`off`,"sonar/no-redundant-jump":`off`}}]}async function Y(e={}){let{files:t=[`**/*.stories.tsx`],overrides:n={},parserOptions:r,storybookDirectory:i=`.storybook`}=e,[a,o]=await Promise.all([L(import(`eslint-plugin-storybook`)),L(import(`@typescript-eslint/parser`))]),s={parser:o,parserOptions:{ecmaFeatures:{jsx:!0},projectService:!0,...r},sourceType:`module`};return[{name:`2digits:storybook/setup`,plugins:{storybook:p(a)}},{name:`2digits:storybook/rules`,files:t,languageOptions:s,rules:{"storybook/await-interactions":`error`,"storybook/context-in-play-function":`error`,"storybook/csf-component":`error`,"storybook/default-exports":`error`,"storybook/hierarchy-separator":`error`,"storybook/meta-inline-properties":`error`,"storybook/no-redundant-story-name":`error`,"storybook/no-stories-of":`error`,"storybook/no-title-property-in-meta":`error`,"storybook/no-uninstalled-addons":`error`,"storybook/prefer-pascal-case":`error`,"storybook/story-exports":`error`,"storybook/use-storybook-expect":`error`,"storybook/use-storybook-testing-library":`error`,"storybook/meta-satisfies-type":`error`,...n}},{name:`2digits:storybook/disables`,files:t,rules:{"react-hooks/rules-of-hooks":`off`,"react/display-name":`off`,"sonar/no-duplicate-string":`off`}},{name:`2digits:storybook/config`,files:[`${i}/main.@(js|cjs|mjs|ts)`],languageOptions:s,rules:{"storybook/no-uninstalled-addons":`error`}}]}async function ve(e={}){let{overrides:t={}}=e,[n,{tailwindFunctions:i},a]=await Promise.all([L(import(`eslint-plugin-tailwindcss`)),L(import(`@2digits/constants`)),r([`tailwind.config.ts`,`tailwind.config.js`])]);return[{files:[C],name:`2digits:tailwind`,plugins:{tailwindcss:n},settings:{tailwindcss:{callees:i,config:a}},rules:{...n.configs.recommended.rules,...t}}]}async function ye(e={}){let{overrides:t={}}=e,r=await L(import(`@tanstack/eslint-plugin-query`)),i=n(r.configs[`flat/recommended`].at(0)?.rules??{},M);return[{files:[C],name:`2digits:tanstack`,plugins:{tanstack:r},rules:{...i,...t}}]}async function be(e={}){let{overrides:t={}}=e,n=await L(import(`eslint-plugin-turbo`));return[{files:[C],name:`2digits:turbo`,plugins:{turbo:n},rules:{"turbo/no-undeclared-env-vars":`error`,...t}}]}async function xe(e={}){let{overrides:n={},parserOptions:r={}}=e,[{plugin:i,configs:a,parser:o},s]=await Promise.all([L(import(`typescript-eslint`)),L(import(`@2digits/eslint-plugin`))]),c=t(a.strictTypeChecked,M),l=Object.fromEntries(c.flatMap(({rules:e})=>Object.entries(e??{})));return[{name:`2digits:typescript/setup`,plugins:{ts:i,"@2digits":s}},{name:`2digits:typescript/rules`,files:[C],ignores:[O],languageOptions:{parser:o,parserOptions:{tsconfigRootDir:process.cwd(),projectService:!0,warnOnUnsupportedTypeScriptVersion:!1,...r},sourceType:`module`},rules:{...l,"ts/array-type":[`error`,{default:`generic`,readonly:`generic`}],"ts/restrict-template-expressions":[`error`,{allowNumber:!0}],"ts/ban-ts-comment":[`error`,{"ts-ignore":`allow-with-description`}],"ts/consistent-type-exports":[`error`],"ts/consistent-type-imports":[`error`,{prefer:`type-imports`,disallowTypeAnnotations:!1,fixStyle:`inline-type-imports`}],"ts/no-empty-object-type":[`error`,{allowInterfaces:`with-single-extends`,allowObjectTypes:`never`}],"ts/no-explicit-any":[`error`],"ts/no-import-type-side-effects":[`error`],"ts/no-misused-promises":`off`,"ts/no-confusing-void-expression":`off`,"ts/no-unused-vars":[`error`,{ignoreRestSiblings:!0,argsIgnorePattern:`^_`,varsIgnorePattern:`^_`}],"ts/unbound-method":`off`,...s.configs.recommended.rules,...n}},{name:`2digits:typescript/disables/dts`,files:[`**/*.d.ts`],ignores:[O],rules:{"unicorn/no-abusive-eslint-disable":`off`,"no-duplicate-imports":`off`,"no-restricted-syntax":`off`,"ts/no-unused-vars":`off`}},{name:`2digits:typescript/disables/test`,files:[`**/*.{test,spec}.ts?(x)`],ignores:[O],rules:{"no-unused-expressions":`off`}},{name:`2digits:typescript/disables/cjs`,files:[`**/*.js`,`**/*.cjs`,`**/*.cts`],ignores:[O],rules:{"ts/no-require-imports":`off`,"ts/no-var-requires":`off`}}]}function Se(){return[{files:[C],name:`2digits:unicorn`,plugins:{unicorn:S},rules:{...S.configs.recommended.rules,"unicorn/filename-case":[`off`],"unicorn/prefer-module":[`off`],"unicorn/prevent-abbreviations":[`off`],"unicorn/prefer-ternary":[`error`,`only-single-line`],"unicorn/no-useless-undefined":[`error`,{checkArguments:!1,checkArrowFunctionBody:!1}],"unicorn/prefer-top-level-await":[`off`]}}]}function Ce(){return[{name:`2digits:yaml/setup`,plugins:{yml:ce}},{name:`2digits:yaml/base`,...X,rules:{"no-irregular-whitespace":`off`,"no-unused-vars":`off`,"spaced-comment":`off`}},{name:`2digits:yaml/recommended`,...X,rules:{"yml/no-empty-document":`error`,"yml/no-empty-key":`error`,"yml/no-empty-mapping-value":`error`,"yml/no-empty-sequence-entry":`error`,"yml/no-irregular-whitespace":`error`,"yml/no-tab-indent":`error`,"yml/vue-custom-block/no-parsing-error":`error`}},{name:`2digits:yaml/standard`,...X,rules:{"yml/block-mapping":`error`,"yml/block-sequence":`error`,"yml/plain-scalar":`error`,"yml/spaced-comment":`error`}},{name:`2digits:yaml/prettier`,...X,rules:{"yml/block-mapping-colon-indicator-newline":`off`,"yml/block-mapping-question-indicator-newline":`off`,"yml/block-sequence-hyphen-indicator-newline":`off`,"yml/flow-mapping-curly-newline":`off`,"yml/flow-mapping-curly-spacing":`off`,"yml/flow-sequence-bracket-newline":`off`,"yml/flow-sequence-bracket-spacing":`off`,"yml/indent":`off`,"yml/key-spacing":`off`,"yml/no-multiple-empty-lines":`off`,"yml/no-trailing-zeros":`off`,"yml/quotes":`off`}}]}const X={files:[`**/*.y?(a)ml`],languageOptions:{parser:h}};function Z(e,t){return typeof e==`boolean`?e:e?.enable??t??!1}function Q(e){if(typeof e==`boolean`||e===void 0)return{};let{enable:t,...n}=e;return n}async function $(t={},...n){let i;t.pnpm===void 0&&(i=r(`pnpm-workspace.yaml`));let o=new e(H(t.ignores),U(t.js),j(),fe(),P(),W(),Se(),_e(),ge(),A(),G(),Ce(),le(),B());Z(t.css)&&(o=o.append(I(Q(t.css)))),Z(t.turbo,a(`turbo`))&&(o=o.append(be(Q(t.turbo))));let{overrides:s,...c}=Q(t.ts);return Z(t.ts,a(`typescript`))&&(o=o.append(xe(Q(t.ts)))),Z(t.react,a(`react`))&&(o=o.append(he({...Q(t.react),...c}))),Z(t.next,a(`next`))&&(o=o.append(de({...Q(t.next),...c}))),Z(t.storybook,a(`storybook`))&&(o=o.append(Y({...Q(t.storybook),...c}))),Z(t.tailwind,a(`tailwindcss`))&&(o=o.append(ve(Q(t.tailwind)))),Z(t.tanstack,a(`react-query`)||a(`@tanstack/react-query`)||a(`@tanstack/react-query-devtools`))&&(o=o.append(ye(Q(t.tanstack)))),Z(t.drizzle,a(`drizzle-kit`)||a(`drizzle-orm`))&&(o=o.append(R(Q(t.drizzle)))),Z(t.graphql,a(`graphql`))&&(o=o.append(V(Q(t.graphql)))),Z(t.pnpm,!!await i)&&(o=o.append(pe())),o=o.append(...n),a(`prettier`)&&(o=o.append(me())),o.renamePlugins(M).toConfigs()}export{$ as default,$ as twoDigits};
1
+ import{FlatConfigComposer as e,renamePluginsInConfigs as t,renamePluginsInRules as n}from"eslint-flat-config-utils";import{findUp as r}from"find-up";import{getPackageInfo as i,isPackageExists as a}from"local-pkg";import o from"eslint-plugin-antfu";import s from"eslint-plugin-de-morgan";import c from"@eslint-community/eslint-plugin-eslint-comments";import l from"@eslint-community/eslint-plugin-eslint-comments/configs";import u from"@eslint/css";import{tailwind3 as d,tailwind4 as f}from"tailwind-csstree";import{fixupPluginRules as p}from"@eslint/compat";import m from"eslint-plugin-github-action";import h from"yaml-eslint-parser";import g from"eslint-config-flat-gitignore";import ee from"@eslint/js";import te from"@stylistic/eslint-plugin";import _ from"globals";import ne from"eslint-plugin-jsdoc";import re,{configs as v}from"eslint-plugin-jsonc";import ie from"jsonc-eslint-parser";import y from"@eslint/markdown";import{mergeProcessors as ae,processorPassThrough as oe}from"eslint-merge-processors";import b from"eslint-plugin-n";import x from"eslint-plugin-regexp";import se from"eslint-plugin-sonarjs";import S from"eslint-plugin-unicorn";import ce from"eslint-plugin-yml";const C=`**/*.?([cm])[jt]s?(x)`,w=`**/*.?([cm])ts`,T=`**/*.?([cm])tsx`,E=`.github/workflows/*.y?(a)ml`,D=`**/*.md`,O=`${D}/${C}`,k=`**/node_modules,**/dist,**/package-lock.json,**/yarn.lock,**/pnpm-lock.yaml,**/bun.lockb,**/bun.lock,**/output,**/coverage,**/temp,**/.temp,**/tmp,**/.tmp,**/.history,**/.vitepress/cache,**/.nuxt,**/.next,**/.vercel,**/.changeset,**/.idea,**/.cache,**/.output,**/.vite-inspect,**/.yarn,**/CHANGELOG*.md,**/*.min.*,**/LICENSE*,**/__snapshots__,**/auto-import?(s).d.ts,**/components.d.ts`.split(`,`);function A(){return[{files:[C],name:`2digits:antfu`,plugins:{antfu:o},rules:{"antfu/if-newline":`error`,"antfu/top-level-function":`error`}}]}function j(){return[{files:[C],name:`2digits:boolean`,plugins:{boolean:s},rules:{...s.configs.recommended.rules}}]}const M={"@next/next":`next`,"@eslint-react/naming-convention":`react-naming-convention`,"@eslint-react/hooks-extra":`react-hooks-extra`,"@eslint-react/dom":`react-dom`,"@eslint-react/web-api":`react-web-api`,"@eslint-react":`react-extra`,"react-hooks":`react-hooks`,"react-compiler":`react-compiler`,"@stylistic/eslint-plugin":`stylistic`,"@typescript-eslint":`ts`,node:`node`,"@eslint-community/eslint-comments":`comments`,storybook:`storybook`,turbo:`turbo`,jsdoc:`jsdoc`,unicorn:`unicorn`,tailwindcss:`tailwindcss`,"@tanstack/query":`tanstack`,"@2digits":`@2digits`,"@graphql-eslint":`gql`,sonarjs:`sonar`,drizzle:`drizzle`,"de-morgan":`boolean`},N=n(l.recommended.rules,M);function P(){return[{files:[C],name:`2digits:comments`,plugins:{comments:c},rules:{...N,"comments/no-unused-disable":`error`,"comments/disable-enable-pair":[`error`,{allowWholeFile:!0}]}}]}async function F(e){if(e?.customSyntax)return e.customSyntax;if(e?.tailwindMajor===3)return d;if(e?.tailwindMajor===4)return f;try{let e=(await i(`tailwindcss`))?.version??``,t=Number.parseInt(e.split(`.`)[0]||`0`,10);if(Number.isFinite(t)&&t>=4)return f}catch{}return d}async function I(e={}){let t=await F(e);return[{name:`2digits:css`,files:[`**/*.css`],language:`css/css`,plugins:{css:u},languageOptions:{tolerant:!0,customSyntax:t},rules:{...u.configs.recommended.rules,...e.overrides}}]}async function L(e){let t=await e;return t.default||t}async function R(e={}){let{overrides:t={},drizzleObjectName:n=[`drizzle`,`db`]}=e,r=await L(import(`eslint-plugin-drizzle`));return[{files:[C],name:`2digits:drizzle`,plugins:{drizzle:p(r)},rules:{"drizzle/enforce-update-with-where":[`error`,{drizzleObjectName:n}],"drizzle/enforce-delete-with-where":[`error`,{drizzleObjectName:n}],...t}}]}const z=Object.fromEntries(m.configs.recommended.flatMap(({rules:e})=>Object.entries({...e})));function B(){return[{name:`2digits:github-actions/setup`,plugins:{"github-action":m}},{name:`2digits:github-actions/recommended`,files:[E],ignores:[`!**/${E}`],languageOptions:{parser:h},rules:{...z}}]}async function V(e={}){let{overrides:t={},files:r=[`**/*.graphql`,`**/*.gql`]}=e,[i,a]=await Promise.all([L(import(`@graphql-eslint/eslint-plugin`)),import(`graphql-config`).then(({loadConfig:e})=>e({throwOnEmpty:!1,throwOnMissing:!1}).then(e=>e?.getDefault().schema))]),o=i.configs[`flat/operations-recommended`].rules,s={};if(a)s=o;else for(let e of Object.keys(o)){let t=e.replace(`@graphql-eslint/`,``);if(t in i.rules&&(i.rules[t].meta.docs?.requiresSchema||i.rules[t].meta.docs?.requiresSiblings))continue;s[e]=o[e]}let c=n(s,M);return[{name:`2digits:graphql`,plugins:{gql:i},languageOptions:{parser:i.parser},files:r,rules:{...c,"gql/naming-convention":[`error`,{allowLeadingUnderscore:!0}],...t}}]}function H(e={}){let{gitIgnore:t,ignores:n=[]}=e;return[{ignores:[k,n].flat(),name:`2digits:ignores`},g({strict:!1,...t,name:`2digits:gitignore`})]}function U(e={}){let{overrides:t={}}=e;return[{files:[C],name:`2digits:javascript`,plugins:{stylistic:te},languageOptions:{ecmaVersion:2022,globals:{..._.browser,..._.es2021,..._.node,document:`readonly`,navigator:`readonly`,window:`readonly`},parserOptions:{ecmaFeatures:{jsx:!0},ecmaVersion:2022,sourceType:`module`},sourceType:`module`},linterOptions:{reportUnusedDisableDirectives:!0},rules:{...ee.configs.recommended.rules,"accessor-pairs":[`error`,{enforceForClassMembers:!0,setWithoutGet:!0}],"array-callback-return":`error`,"block-scoped-var":`error`,"constructor-super":`error`,"default-case-last":`error`,"dot-notation":[`error`,{allowKeywords:!0}],eqeqeq:[`error`,`smart`],"new-cap":[`error`,{capIsNew:!1,newIsCap:!0,properties:!0}],"no-alert":`error`,"no-array-constructor":`error`,"no-async-promise-executor":`error`,"no-caller":`error`,"no-case-declarations":`error`,"no-class-assign":`error`,"no-compare-neg-zero":`error`,"no-cond-assign":[`error`,`always`],"no-const-assign":`error`,"no-control-regex":`error`,"no-debugger":`error`,"no-delete-var":`error`,"no-dupe-args":`error`,"no-dupe-class-members":`error`,"no-dupe-keys":`error`,"no-duplicate-case":`error`,"no-empty":[`error`,{allowEmptyCatch:!0}],"no-empty-character-class":`error`,"no-empty-pattern":`error`,"no-eval":`error`,"no-ex-assign":`error`,"no-extend-native":`error`,"no-extra-bind":`error`,"no-extra-boolean-cast":`error`,"no-fallthrough":`error`,"no-func-assign":`error`,"no-global-assign":`error`,"no-implied-eval":`error`,"no-import-assign":`error`,"no-invalid-regexp":`error`,"no-irregular-whitespace":`error`,"no-iterator":`error`,"no-labels":[`error`,{allowLoop:!1,allowSwitch:!1}],"no-lone-blocks":`error`,"no-loss-of-precision":`error`,"no-misleading-character-class":`error`,"no-multi-str":`error`,"no-new":`error`,"no-new-func":`error`,"no-new-native-nonconstructor":`error`,"no-new-wrappers":`error`,"no-obj-calls":`error`,"no-octal":`error`,"no-octal-escape":`error`,"no-proto":`error`,"no-prototype-builtins":`error`,"no-redeclare":[`error`,{builtinGlobals:!1}],"no-regex-spaces":`error`,"no-restricted-globals":[`error`,{message:"Use `globalThis` instead.",name:`global`},{message:"Use `globalThis` instead.",name:`self`}],"no-restricted-properties":[`error`,{message:"Use `Object.getPrototypeOf` or `Object.setPrototypeOf` instead.",property:`__proto__`},{message:"Use `Object.defineProperty` instead.",property:`__defineGetter__`},{message:"Use `Object.defineProperty` instead.",property:`__defineSetter__`},{message:"Use `Object.getOwnPropertyDescriptor` instead.",property:`__lookupGetter__`},{message:"Use `Object.getOwnPropertyDescriptor` instead.",property:`__lookupSetter__`}],"no-restricted-syntax":[`error`,`DebuggerStatement`,`LabeledStatement`,`WithStatement`,`TSEnumDeclaration`,`TSExportAssignment`],"no-self-assign":[`error`,{props:!0}],"no-self-compare":`error`,"no-sequences":`error`,"no-shadow-restricted-names":`error`,"no-sparse-arrays":`error`,"no-template-curly-in-string":`error`,"no-this-before-super":`error`,"no-throw-literal":`error`,"no-undef":`error`,"no-undef-init":`error`,"no-unexpected-multiline":`error`,"no-unmodified-loop-condition":`error`,"no-unneeded-ternary":[`error`,{defaultAssignment:!1}],"no-unreachable":`error`,"no-unreachable-loop":`error`,"no-unsafe-finally":`error`,"no-unsafe-negation":`error`,"no-unused-expressions":[`error`,{allowShortCircuit:!0,allowTaggedTemplates:!0,allowTernary:!0}],"no-unused-vars":[`error`,{args:`none`,caughtErrors:`none`,ignoreRestSiblings:!0,vars:`all`}],"no-useless-backreference":`error`,"no-useless-call":`error`,"no-useless-catch":`error`,"no-useless-computed-key":`error`,"no-useless-constructor":`error`,"no-useless-rename":`error`,"no-var":`error`,"no-with":`error`,"object-shorthand":[`error`,`always`,{avoidQuotes:!0,ignoreConstructors:!1}],"one-var":[`error`,{initialized:`never`}],"prefer-arrow-callback":[`error`,{allowNamedFunctions:!0,allowUnboundThis:!0}],"prefer-const":[`error`,{destructuring:`all`,ignoreReadBeforeAssign:!0}],"prefer-exponentiation-operator":`error`,"prefer-promise-reject-errors":`error`,"prefer-regex-literals":[`error`,{disallowRedundantWrapping:!0}],"prefer-rest-params":`error`,"prefer-spread":`error`,"prefer-template":`error`,"symbol-description":`error`,"unicode-bom":[`error`,`never`],"use-isnan":[`error`,{enforceForIndexOf:!0,enforceForSwitchCase:!0}],"valid-typeof":[`error`,{requireStringLiterals:!0}],"vars-on-top":`error`,yoda:[`error`,`never`],"stylistic/padding-line-between-statements":[`error`,{blankLine:`always`,prev:[`const`,`let`],next:`*`},{blankLine:`any`,prev:[`const`,`let`],next:[`const`,`let`]},{blankLine:`always`,prev:`*`,next:`return`}],...t}}]}function W(){return[{files:[C],name:`2digits:jsdoc`,plugins:{jsdoc:ne},rules:{"jsdoc/check-access":`error`,"jsdoc/check-param-names":`error`,"jsdoc/check-property-names":`error`,"jsdoc/check-types":`error`,"jsdoc/empty-tags":`error`,"jsdoc/implements-on-classes":`error`,"jsdoc/no-defaults":`error`,"jsdoc/no-multi-asterisks":`error`,"jsdoc/require-param-name":`error`,"jsdoc/require-property":`error`,"jsdoc/require-property-description":`error`,"jsdoc/require-property-name":`error`,"jsdoc/require-returns-check":`error`,"jsdoc/require-returns-description":`error`,"jsdoc/require-yields-check":`error`}}]}function G(){return[...v[`flat/base`].map(e=>({...e,name:`2digits:jsonc/base`})),{name:`2digits:jsonc/json`,files:[`**/*.json`],...K,rules:{...q(v[`flat/recommended-with-json`])}},{name:`2digits:jsonc/jsonc`,files:[`**/*.jsonc`],...K,rules:{...q(v[`flat/recommended-with-jsonc`])}},{name:`2digits:jsonc/json5`,files:[`**/*.json5`],...K,rules:{...q(v[`flat/recommended-with-json5`])}},{name:`2digits:jsonc/package.json`,...K,files:[`**/package.json`],rules:{"jsonc/sort-array-values":[`error`,{order:{type:`asc`},pathPattern:`^files$`}],"jsonc/sort-keys":[`error`,{order:`$schema.publisher.name.displayName.version.private.description.funding.homepage.repository.bugs.categories.type.main.module.types.typesVersions.bin.files.exports.icon.unpkg.jsdelivr.sideEffects.activationEvents.contributes.scripts.keywords.author.license.workspaces.dependencies.devDependencies.peerDependencies.peerDependenciesMeta.optionalDependencies.packageManager.engines.pnpm.overrides.resolutions.husky.simple-git-hooks.lint-staged.eslintConfig.prettier`.split(`.`),pathPattern:`^$`},{order:{type:`asc`},pathPattern:`^(?:dev|peer|optional|bundled)?[Dd]ependencies(Meta)?$`},{order:[`types`,`import`,`module`,`require`,`default`],pathPattern:`^exports.*$`}]}},{name:`2digits:jsonc/tsconfig.json`,...K,files:[`**/tsconfig.json`,`**/tsconfig.*.json`,`**/tsconfig-*.json`,`**/jsconfig.json`,`**/jsconfig.*.json`,`**/jsconfig-*.json`],rules:{"jsonc/sort-keys":[`error`,{order:[`$schema`,`extends`,`compilerOptions`,`references`,`files`,`include`,`exclude`],pathPattern:`^$`},{order:`incremental.composite.tsBuildInfoFile.disableSourceOfProjectReferenceRedirect.disableSolutionSearching.disableReferencedProjectLoad.target.lib.jsx.experimentalDecorators.emitDecoratorMetadata.jsxFactory.jsxFragmentFactory.jsxImportSource.reactNamespace.noLib.useDefineForClassFields.moduleDetection.module.rootDir.moduleResolution.baseUrl.paths.rootDirs.typeRoots.types.allowUmdGlobalAccess.moduleSuffixes.allowImportingTsExtensions.resolvePackageJsonExports.resolvePackageJsonImports.customConditions.resolveJsonModule.allowArbitraryExtensions.noResolve.allowJs.checkJs.maxNodeModuleJsDepth.declaration.declarationMap.emitDeclarationOnly.sourceMap.inlineSourceMap.outFile.outDir.removeComments.noEmit.importHelpers.importsNotUsedAsValues.downlevelIteration.sourceRoot.mapRoot.inlineSources.emitBOM.newLine.stripInternal.noEmitHelpers.noEmitOnError.preserveConstEnums.declarationDir.preserveValueImports.isolatedModules.verbatimModuleSyntax.allowSyntheticDefaultImports.esModuleInterop.preserveSymlinks.forceConsistentCasingInFileNames.strict.strictBindCallApply.strictFunctionTypes.strictNullChecks.strictPropertyInitialization.allowUnreachableCode.allowUnusedLabels.alwaysStrict.exactOptionalPropertyTypes.noFallthroughCasesInSwitch.noImplicitAny.noImplicitOverride.noImplicitReturns.noImplicitThis.noPropertyAccessFromIndexSignature.noUncheckedIndexedAccess.noUnusedLocals.noUnusedParameters.useUnknownInCatchVariables.skipDefaultLibCheck.skipLibCheck`.split(`.`),pathPattern:`^compilerOptions$`}]}},...v[`flat/prettier`].map(e=>({...e,name:`2digits:jsonc/prettier`}))]}const K={languageOptions:{parser:ie},plugins:{jsonc:re}};function q(e){return Object.fromEntries(e.flatMap(({rules:e})=>Object.entries(e??{})))}const J=[D];function le(){return[{name:`2digits:markdown/setup`,plugins:{markdown:y}},{name:`2digits:markdown/processor`,files:J,language:`markdown/gfm`,ignores:[`**/*.md/*.md`],processor:ae([y.processors.markdown,oe])},{name:`2digits:markdown/parser`,files:J,language:`markdown/gfm`,languageOptions:{parser:ue}},{name:`2digits:markdown/rules`,files:J,language:`markdown/gfm`,rules:{"markdown/fenced-code-language":`error`,"markdown/heading-increment":`error`,"markdown/no-empty-links":`error`,"markdown/no-invalid-label-refs":`error`,"markdown/no-missing-label-refs":`error`}},{name:`2digits:markdown/disables`,files:[O],languageOptions:{parserOptions:{ecmaFeatures:{impliedStrict:!0}}},rules:{"no-alert":`off`,"no-console":`off`,"no-labels":`off`,"no-lone-blocks":`off`,"no-restricted-syntax":`off`,"no-undef":`off`,"no-unused-expressions":`off`,"no-unused-labels":`off`,"no-unused-vars":`off`,"node/prefer-global/process":`off`,"ts/consistent-type-imports":`off`,"ts/explicit-function-return-type":`off`,"ts/no-namespace":`off`,"ts/no-redeclare":`off`,"ts/no-require-imports":`off`,"ts/no-unused-expressions":`off`,"ts/no-unused-vars":`off`,"ts/no-use-before-define":`off`,"unicode-bom":`off`}}]}const ue={meta:{name:`parser-plain`},parseForESLint:e=>({ast:{body:[],comments:[],loc:{end:e.length,start:0},range:[0,e.length],tokens:[],type:`Program`},scopeManager:null,services:{isPlain:!0},visitorKeys:{Program:[]}})};async function de(e={}){let{files:t=[w,T],overrides:r={},parserOptions:i}=e,[a,o]=await Promise.all([L(import(`@next/eslint-plugin-next`)),L(import(`@typescript-eslint/parser`))]),s=n({...a.configs.recommended.rules,...a.configs[`core-web-vitals`].rules},M);return[{name:`2digits:next/setup`,plugins:{next:p(a)}},{name:`2digits:next/rules`,files:t,languageOptions:{parser:o,parserOptions:{ecmaFeatures:{jsx:!0},projectService:!0,...i},sourceType:`module`},rules:{...s,"next/no-html-link-for-pages":`off`,...r}}]}function fe(){return[{files:[C],name:`2digits:node`,settings:{node:{version:`>= 22.0.0`}},plugins:{node:b},rules:{"node/handle-callback-err":[`error`,`^(err|error)$`],"node/no-deprecated-api":`error`,"node/no-exports-assign":`error`,"node/no-new-require":`error`,"node/no-path-concat":`error`,"node/no-unsupported-features/node-builtins":[`error`,{allowExperimental:!0}],"node/prefer-global/buffer":`error`,"node/prefer-global/process":`error`,"node/prefer-global/text-encoder":`error`,"node/prefer-global/url":`error`,"node/prefer-global/console":`error`,"node/prefer-global/url-search-params":`error`,"node/prefer-global/text-decoder":`error`,"node/process-exit-as-throw":`error`}}]}async function pe(){let e=await L(import(`eslint-plugin-pnpm`));return[{name:`2digits:pnpm/package-json`,files:[`**/package.json`],languageOptions:{parser:await L(import(`jsonc-eslint-parser`))},plugins:{pnpm:e},rules:{"pnpm/json-enforce-catalog":`error`,"pnpm/json-prefer-workspace-settings":`error`,"pnpm/json-valid-catalog":`error`}},{name:`2digits:pnpm/pnpm-workspace-yaml`,files:[`pnpm-workspace.yaml`],languageOptions:{parser:await L(import(`yaml-eslint-parser`))},plugins:{pnpm:e},rules:{"pnpm/yaml-no-duplicate-catalog-item":`error`,"pnpm/yaml-no-unused-catalog-item":`error`}}]}async function me(){let[e,t]=await Promise.all([L(import(`eslint-config-prettier`)),L(import(`@stylistic/eslint-plugin`))]);return[{name:`2digits:prettier`,plugins:{stylistic:t},rules:{...e.rules,"tailwindcss/classnames-order":`off`,"stylistic/jsx-newline":[`error`,{prevent:!1}]}}]}async function he(e={}){let{files:t=[w,T],overrides:r={},parserOptions:i,tsconfigRootDir:a,reactCompiler:o=!0}=e,[s,c,l,u,d]=await Promise.all([L(import(`@eslint-react/eslint-plugin`)),L(import(`eslint-plugin-react-hooks`)),L(import(`@typescript-eslint/parser`)),o?L(import(`eslint-plugin-react-compiler`)):Promise.resolve(void 0),L(import(`@stylistic/eslint-plugin`))]),f=s.configs.all.plugins,p=n({...c.configs[`recommended-latest`].rules,...s.configs[`disable-conflict-eslint-plugin-react`].rules,...s.configs[`recommended-type-checked`].rules},M);return[{name:`2digits:react/setup`,plugins:{stylistic:d,"react-dom":f[`@eslint-react/dom`],"react-web-api":f[`@eslint-react/web-api`],"react-extra":f[`@eslint-react`],"react-hooks":c,"react-hooks-extra":f[`@eslint-react/hooks-extra`],"react-naming-convention":f[`@eslint-react/naming-convention`],...o?{"react-compiler":u}:{}},settings:{react:{version:`detect`}}},{name:`2digits:react/rules`,files:t,languageOptions:{parser:l,parserOptions:{ecmaFeatures:{jsx:!0},tsconfigRootDir:a,projectService:!0,...i},sourceType:`module`},rules:{...p,...o?{"react-compiler/react-compiler":`error`}:{},"react-extra/no-unnecessary-use-callback":`error`,"react-extra/prefer-use-state-lazy-initialization":`error`,"react-extra/no-unnecessary-use-prefix":`error`,"react-extra/no-unnecessary-use-memo":`error`,"react-hooks-extra/no-direct-set-state-in-use-effect":`error`,"react-extra/no-useless-fragment":`off`,"react-extra/prefer-read-only-props":`off`,"react-extra/jsx-shorthand-boolean":`error`,"react-extra/jsx-shorthand-fragment":`error`,"react-extra/prefer-namespace-import":`error`,"react-naming-convention/use-state":`error`,"stylistic/jsx-curly-newline":`off`,"stylistic/jsx-newline":[`error`,{prevent:!1}],"stylistic/jsx-self-closing-comp":`error`,...r}}]}function ge(){return[{files:[C],name:`2digits:regexp`,plugins:{regexp:x},rules:{...x.configs[`flat/recommended`].rules}}]}function _e(){return[{files:[C],name:`2digits:sonar`,plugins:{sonar:se},rules:{"sonar/code-eval":`error`,"sonar/cognitive-complexity":`error`,"sonar/comma-or-logical-or-case":`error`,"sonar/concise-regex":`error`,"sonar/confidential-information-logging":`error`,"sonar/constructor-for-side-effects":`error`,"sonar/content-length":`error`,"sonar/content-security-policy":`error`,"sonar/cookie-no-httponly":`error`,"sonar/cors":`error`,"sonar/csrf":`error`,"sonar/max-switch-cases":`error`,"sonar/no-all-duplicated-branches":`error`,"sonar/no-collapsible-if":`error`,"sonar/no-collection-size-mischeck":`error`,"sonar/no-duplicate-string":[`error`,{threshold:5}],"sonar/no-duplicated-branches":`error`,"sonar/no-element-overwrite":`error`,"sonar/no-empty-collection":`error`,"sonar/no-extra-arguments":`error`,"sonar/no-for-in-iterable":`error`,"sonar/no-gratuitous-expressions":`error`,"sonar/no-identical-conditions":`error`,"sonar/no-identical-expressions":`error`,"sonar/no-identical-functions":`error`,"sonar/no-ignored-return":`error`,"sonar/no-inverted-boolean-check":`error`,"sonar/no-nested-switch":`error`,"sonar/no-nested-template-literals":`error`,"sonar/no-redundant-boolean":`error`,"sonar/no-same-line-conditional":`error`,"sonar/no-small-switch":`error`,"sonar/no-unused-collection":`error`,"sonar/no-use-of-empty-return-value":`error`,"sonar/no-useless-catch":`error`,"sonar/non-existent-operator":`error`,"sonar/prefer-immediate-return":`error`,"sonar/prefer-object-literal":`error`,"sonar/prefer-single-boolean-return":`error`,"sonar/prefer-while":`error`,"sonar/elseif-without-else":`off`,"sonar/no-redundant-jump":`off`}}]}async function Y(e={}){let{files:t=[`**/*.stories.tsx`],overrides:n={},parserOptions:r,storybookDirectory:i=`.storybook`}=e,[a,o]=await Promise.all([L(import(`eslint-plugin-storybook`)),L(import(`@typescript-eslint/parser`))]),s={parser:o,parserOptions:{ecmaFeatures:{jsx:!0},projectService:!0,...r},sourceType:`module`};return[{name:`2digits:storybook/setup`,plugins:{storybook:p(a)}},{name:`2digits:storybook/rules`,files:t,languageOptions:s,rules:{"storybook/await-interactions":`error`,"storybook/context-in-play-function":`error`,"storybook/csf-component":`error`,"storybook/default-exports":`error`,"storybook/hierarchy-separator":`error`,"storybook/meta-inline-properties":`error`,"storybook/no-redundant-story-name":`error`,"storybook/no-stories-of":`error`,"storybook/no-title-property-in-meta":`error`,"storybook/no-uninstalled-addons":`error`,"storybook/prefer-pascal-case":`error`,"storybook/story-exports":`error`,"storybook/use-storybook-expect":`error`,"storybook/use-storybook-testing-library":`error`,"storybook/meta-satisfies-type":`error`,...n}},{name:`2digits:storybook/disables`,files:t,rules:{"react-hooks/rules-of-hooks":`off`,"react/display-name":`off`,"sonar/no-duplicate-string":`off`}},{name:`2digits:storybook/config`,files:[`${i}/main.@(js|cjs|mjs|ts)`],languageOptions:s,rules:{"storybook/no-uninstalled-addons":`error`}}]}async function ve(e={}){let{overrides:t={}}=e,[n,{tailwindFunctions:i},a]=await Promise.all([L(import(`eslint-plugin-tailwindcss`)),L(import(`@2digits/constants`)),r([`tailwind.config.ts`,`tailwind.config.js`])]);return[{files:[C],name:`2digits:tailwind`,plugins:{tailwindcss:n},settings:{tailwindcss:{callees:i,config:a}},rules:{...n.configs.recommended.rules,...t}}]}async function ye(e={}){let{overrides:t={}}=e,r=await L(import(`@tanstack/eslint-plugin-query`)),i=n(r.configs[`flat/recommended`].at(0)?.rules??{},M);return[{files:[C],name:`2digits:tanstack`,plugins:{tanstack:r},rules:{...i,...t}}]}async function be(e={}){let{overrides:t={}}=e,n=await L(import(`eslint-plugin-turbo`));return[{files:[C],name:`2digits:turbo`,plugins:{turbo:n},rules:{"turbo/no-undeclared-env-vars":`error`,...t}}]}async function xe(e={}){let{overrides:n={},parserOptions:r={}}=e,[{plugin:i,configs:a,parser:o},s]=await Promise.all([L(import(`typescript-eslint`)),L(import(`@2digits/eslint-plugin`))]),c=t(a.strictTypeChecked,M),l=Object.fromEntries(c.flatMap(({rules:e})=>Object.entries(e??{})));return[{name:`2digits:typescript/setup`,plugins:{ts:i,"@2digits":s}},{name:`2digits:typescript/rules`,files:[C],ignores:[O],languageOptions:{parser:o,parserOptions:{tsconfigRootDir:process.cwd(),projectService:!0,warnOnUnsupportedTypeScriptVersion:!1,...r},sourceType:`module`},rules:{...l,"ts/array-type":[`error`,{default:`generic`,readonly:`generic`}],"ts/restrict-template-expressions":[`error`,{allowNumber:!0}],"ts/ban-ts-comment":[`error`,{"ts-ignore":`allow-with-description`}],"ts/consistent-type-exports":[`error`],"ts/consistent-type-imports":[`error`,{prefer:`type-imports`,disallowTypeAnnotations:!1,fixStyle:`inline-type-imports`}],"ts/no-empty-object-type":[`error`,{allowInterfaces:`with-single-extends`,allowObjectTypes:`never`}],"ts/no-explicit-any":[`error`],"ts/no-import-type-side-effects":[`error`],"ts/no-misused-promises":`off`,"ts/no-confusing-void-expression":`off`,"ts/no-unused-vars":[`error`,{ignoreRestSiblings:!0,argsIgnorePattern:`^_`,varsIgnorePattern:`^_`}],"ts/unbound-method":`off`,...s.configs.recommended.rules,...n}},{name:`2digits:typescript/disables/dts`,files:[`**/*.d.ts`],ignores:[O],rules:{"unicorn/no-abusive-eslint-disable":`off`,"no-duplicate-imports":`off`,"no-restricted-syntax":`off`,"ts/no-unused-vars":`off`}},{name:`2digits:typescript/disables/test`,files:[`**/*.{test,spec}.ts?(x)`],ignores:[O],rules:{"no-unused-expressions":`off`}},{name:`2digits:typescript/disables/cjs`,files:[`**/*.js`,`**/*.cjs`,`**/*.cts`],ignores:[O],rules:{"ts/no-require-imports":`off`,"ts/no-var-requires":`off`}}]}function Se(){return[{files:[C],name:`2digits:unicorn`,plugins:{unicorn:S},rules:{...S.configs.recommended.rules,"unicorn/filename-case":[`off`],"unicorn/prefer-module":[`off`],"unicorn/prevent-abbreviations":[`off`],"unicorn/prefer-ternary":[`error`,`only-single-line`],"unicorn/no-useless-undefined":[`error`,{checkArguments:!1,checkArrowFunctionBody:!1}],"unicorn/prefer-top-level-await":[`off`]}}]}function Ce(){return[{name:`2digits:yaml/setup`,plugins:{yml:ce}},{name:`2digits:yaml/base`,...X,rules:{"no-irregular-whitespace":`off`,"no-unused-vars":`off`,"spaced-comment":`off`}},{name:`2digits:yaml/recommended`,...X,rules:{"yml/no-empty-document":`error`,"yml/no-empty-key":`error`,"yml/no-empty-mapping-value":`error`,"yml/no-empty-sequence-entry":`error`,"yml/no-irregular-whitespace":`error`,"yml/no-tab-indent":`error`,"yml/vue-custom-block/no-parsing-error":`error`}},{name:`2digits:yaml/standard`,...X,rules:{"yml/block-mapping":`error`,"yml/block-sequence":`error`,"yml/plain-scalar":`error`,"yml/spaced-comment":`error`}},{name:`2digits:yaml/prettier`,...X,rules:{"yml/block-mapping-colon-indicator-newline":`off`,"yml/block-mapping-question-indicator-newline":`off`,"yml/block-sequence-hyphen-indicator-newline":`off`,"yml/flow-mapping-curly-newline":`off`,"yml/flow-mapping-curly-spacing":`off`,"yml/flow-sequence-bracket-newline":`off`,"yml/flow-sequence-bracket-spacing":`off`,"yml/indent":`off`,"yml/key-spacing":`off`,"yml/no-multiple-empty-lines":`off`,"yml/no-trailing-zeros":`off`,"yml/quotes":`off`}}]}const X={files:[`**/*.y?(a)ml`],languageOptions:{parser:h}};function Z(e,t){return typeof e==`boolean`?e:e?.enable??t??!1}function Q(e){if(typeof e==`boolean`||e===void 0)return{};let{enable:t,...n}=e;return n}async function $(t={},...n){let i;t.pnpm===void 0&&(i=r(`pnpm-workspace.yaml`));let o=new e(H(t.ignores),U(t.js),j(),fe(),P(),W(),Se(),_e(),ge(),A(),G(),Ce(),le(),B());Z(t.css)&&(o=o.append(I(Q(t.css)))),Z(t.turbo,a(`turbo`))&&(o=o.append(be(Q(t.turbo))));let{overrides:s,...c}=Q(t.ts);return Z(t.ts,a(`typescript`))&&(o=o.append(xe(Q(t.ts)))),Z(t.react,a(`react`))&&(o=o.append(he({...Q(t.react),...c}))),Z(t.next,a(`next`))&&(o=o.append(de({...Q(t.next),...c}))),Z(t.storybook,a(`storybook`))&&(o=o.append(Y({...Q(t.storybook),...c}))),Z(t.tailwind,a(`tailwindcss`))&&(o=o.append(ve(Q(t.tailwind)))),Z(t.tanstack,a(`react-query`)||a(`@tanstack/react-query`)||a(`@tanstack/react-query-devtools`))&&(o=o.append(ye(Q(t.tanstack)))),Z(t.drizzle,a(`drizzle-kit`)||a(`drizzle-orm`))&&(o=o.append(R(Q(t.drizzle)))),Z(t.graphql,a(`graphql`))&&(o=o.append(V(Q(t.graphql)))),Z(t.pnpm,!!await i)&&(o=o.append(pe())),o=o.append(...n),a(`prettier`)&&(o=o.append(me())),o.renamePlugins(M).toConfigs()}export{$ as default,$ as twoDigits};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@2digits/eslint-config",
3
- "version": "4.8.7",
3
+ "version": "4.8.8",
4
4
  "description": "Effortlessly enforce best practices and catch errors with this comprehensive ESLint configuration for TypeScript, featuring popular plugins like @typescript-eslint, eslint-plugin-react, and eslint-plugin-unicorn.",
5
5
  "homepage": "https://2d-configs.vercel.app/",
6
6
  "repository": {
@@ -27,17 +27,17 @@
27
27
  "public": true,
28
28
  "dependencies": {
29
29
  "@eslint-community/eslint-plugin-eslint-comments": "4.5.0",
30
- "@eslint-react/eslint-plugin": "1.53.1",
31
- "@eslint/compat": "1.3.2",
32
- "@eslint/css": "0.11.0",
30
+ "@eslint-react/eslint-plugin": "2.0.1",
31
+ "@eslint/compat": "1.4.0",
32
+ "@eslint/css": "0.11.1",
33
33
  "@eslint/js": "9.36.0",
34
- "@eslint/markdown": "7.2.0",
34
+ "@eslint/markdown": "7.3.0",
35
35
  "@graphql-eslint/eslint-plugin": "4.4.0",
36
- "@next/eslint-plugin-next": "15.5.3",
36
+ "@next/eslint-plugin-next": "15.5.4",
37
37
  "@stylistic/eslint-plugin": "5.4.0",
38
- "@tanstack/eslint-plugin-query": "5.90.1",
39
- "@typescript-eslint/parser": "8.44.0",
40
- "@typescript-eslint/utils": "8.44.0",
38
+ "@tanstack/eslint-plugin-query": "5.91.0",
39
+ "@typescript-eslint/parser": "8.44.1",
40
+ "@typescript-eslint/utils": "8.44.1",
41
41
  "eslint-config-flat-gitignore": "2.1.0",
42
42
  "eslint-config-prettier": "10.1.8",
43
43
  "eslint-flat-config-utils": "2.1.4",
@@ -46,17 +46,17 @@
46
46
  "eslint-plugin-de-morgan": "1.3.1",
47
47
  "eslint-plugin-drizzle": "0.2.3",
48
48
  "eslint-plugin-github-action": "0.0.16",
49
- "eslint-plugin-jsdoc": "60.1.1",
49
+ "eslint-plugin-jsdoc": "60.5.0",
50
50
  "eslint-plugin-jsonc": "2.20.1",
51
51
  "eslint-plugin-n": "17.23.1",
52
- "eslint-plugin-pnpm": "1.1.1",
52
+ "eslint-plugin-pnpm": "1.1.2",
53
53
  "eslint-plugin-react-compiler": "19.1.0-rc.2",
54
54
  "eslint-plugin-react-hooks": "5.2.0",
55
55
  "eslint-plugin-regexp": "2.10.0",
56
56
  "eslint-plugin-sonarjs": "3.0.5",
57
- "eslint-plugin-storybook": "9.1.7",
57
+ "eslint-plugin-storybook": "9.1.8",
58
58
  "eslint-plugin-tailwindcss": "3.18.2",
59
- "eslint-plugin-turbo": "2.5.6",
59
+ "eslint-plugin-turbo": "2.5.8",
60
60
  "eslint-plugin-unicorn": "61.0.2",
61
61
  "eslint-plugin-yml": "1.18.0",
62
62
  "find-up": "8.0.0",
@@ -65,21 +65,21 @@
65
65
  "jsonc-eslint-parser": "2.4.1",
66
66
  "local-pkg": "1.1.2",
67
67
  "tailwind-csstree": "0.1.4",
68
- "typescript-eslint": "8.44.0",
68
+ "typescript-eslint": "8.44.1",
69
69
  "yaml-eslint-parser": "1.3.0",
70
- "@2digits/eslint-plugin": "3.1.21",
71
- "@2digits/constants": "1.1.9"
70
+ "@2digits/constants": "1.1.9",
71
+ "@2digits/eslint-plugin": "3.1.22"
72
72
  },
73
73
  "devDependencies": {
74
74
  "@eslint/config-inspector": "1.3.0",
75
- "@types/react": "19.1.13",
75
+ "@types/react": "19.1.15",
76
76
  "dedent": "1.7.0",
77
77
  "eslint": "9.36.0",
78
78
  "eslint-typegen": "2.3.0",
79
79
  "execa": "9.6.0",
80
80
  "react": "19.1.1",
81
81
  "tinyglobby": "0.2.15",
82
- "tsdown": "0.15.4",
82
+ "tsdown": "0.15.5",
83
83
  "typescript": "5.9.2",
84
84
  "vitest": "3.2.4",
85
85
  "@2digits/tsconfig": "0.8.2"