@ntnyq/eslint-config 3.2.1 → 3.2.2

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.cjs CHANGED
@@ -443,29 +443,76 @@ var extensionRules = {
443
443
  ]
444
444
  };
445
445
  var unCategorizedRules = {
446
+ "vue/no-v-text": "error",
446
447
  "vue/no-useless-v-bind": "error",
447
448
  "vue/valid-define-options": "error",
448
449
  "vue/prefer-define-options": "error",
450
+ "vue/prefer-use-template-ref": "error",
449
451
  "vue/no-irregular-whitespace": "error",
450
452
  "vue/no-use-v-else-with-v-for": "error",
451
453
  "vue/no-deprecated-delete-set": "error",
454
+ "vue/no-empty-component-block": "error",
452
455
  "vue/require-typed-object-prop": "error",
453
456
  "vue/no-unused-emit-declarations": "error",
454
457
  "vue/padding-line-between-blocks": "error",
455
- "vue/no-ref-object-reactivity-loss": "error",
458
+ "vue/no-multiple-objects-in-class": "error",
456
459
  "vue/prefer-separate-static-class": "error",
460
+ "vue/no-ref-object-reactivity-loss": "error",
461
+ "vue/no-duplicate-attr-inheritance": "error",
462
+ "vue/prefer-prop-type-boolean-first": "error",
463
+ "vue/html-comment-indent": ["error", 2],
457
464
  "vue/next-tick-style": ["error", "promise"],
465
+ "vue/v-for-delimiter-style": ["error", "in"],
458
466
  "vue/no-restricted-v-bind": ["error", "/^v-/"],
459
467
  "vue/custom-event-name-casing": ["error", "camelCase"],
468
+ "vue/define-props-declaration": ["error", "type-based"],
460
469
  "vue/define-emits-declaration": ["error", "type-literal"],
461
470
  "vue/prefer-true-attribute-shorthand": ["error", "always"],
462
471
  "vue/component-options-name-casing": ["error", "PascalCase"],
472
+ "vue/component-api-style": ["error", ["script-setup", "composition"]],
473
+ "vue/html-button-has-type": [
474
+ "error",
475
+ {
476
+ button: true,
477
+ submit: true,
478
+ reset: true
479
+ }
480
+ ],
463
481
  "vue/block-order": [
464
482
  "error",
465
483
  {
466
484
  order: ["script", "template", "style"]
467
485
  }
468
486
  ],
487
+ "vue/enforce-style-attribute": [
488
+ "error",
489
+ {
490
+ allow: ["scoped", "plain"]
491
+ }
492
+ ],
493
+ "vue/block-tag-newline": [
494
+ "error",
495
+ {
496
+ singleline: "always",
497
+ multiline: "always"
498
+ }
499
+ ],
500
+ "vue/no-required-prop-with-default": [
501
+ "error",
502
+ {
503
+ autofix: true
504
+ }
505
+ ],
506
+ "vue/html-comment-content-newline": [
507
+ "error",
508
+ {
509
+ singleline: "ignore",
510
+ multiline: "always"
511
+ },
512
+ {
513
+ exceptions: ["*"]
514
+ }
515
+ ],
469
516
  "vue/no-static-inline-styles": [
470
517
  "error",
471
518
  {
@@ -500,6 +547,16 @@ var unCategorizedRules = {
500
547
  {
501
548
  exceptions: ["-"]
502
549
  }
550
+ ],
551
+ "vue/require-macro-variable-name": [
552
+ "error",
553
+ {
554
+ defineProps: "props",
555
+ defineEmits: "emits",
556
+ defineSlots: "slots",
557
+ useSlots: "slots",
558
+ useAttrs: "attrs"
559
+ }
503
560
  ]
504
561
  };
505
562
  var vue = (options = {}) => {
@@ -543,13 +600,6 @@ var vue = (options = {}) => {
543
600
  math: "always"
544
601
  }
545
602
  ],
546
- "vue/block-tag-newline": [
547
- "error",
548
- {
549
- singleline: "always",
550
- multiline: "always"
551
- }
552
- ],
553
603
  "vue/this-in-template": ["error", "never"],
554
604
  "vue/prop-name-casing": ["error", "camelCase"],
555
605
  "vue/attributes-order": [
@@ -1259,6 +1309,16 @@ var imports = (options = {}) => [
1259
1309
  ];
1260
1310
 
1261
1311
  // src/configs/unicorn.ts
1312
+ var disabledRules2 = {
1313
+ "unicorn/better-regex": "off",
1314
+ "unicorn/prefer-top-level-await": "off",
1315
+ "unicorn/explicit-length-check": "off",
1316
+ "unicorn/no-array-callback-reference": "off",
1317
+ /**
1318
+ * @see https://caniuse.com/?search=globalThis
1319
+ */
1320
+ "unicorn/prefer-global-this": "off"
1321
+ };
1262
1322
  var unicorn = (options = {}) => [
1263
1323
  {
1264
1324
  name: "ntnyq/unicorn",
@@ -1266,15 +1326,6 @@ var unicorn = (options = {}) => [
1266
1326
  unicorn: import_eslint_plugin_unicorn.default
1267
1327
  },
1268
1328
  rules: {
1269
- // Disabled for now
1270
- "unicorn/better-regex": "off",
1271
- "unicorn/prefer-top-level-await": "off",
1272
- "unicorn/explicit-length-check": "off",
1273
- "unicorn/no-array-callback-reference": "off",
1274
- /**
1275
- * @see https://caniuse.com/?search=globalThis
1276
- */
1277
- "unicorn/prefer-global-this": "off",
1278
1329
  "unicorn/error-message": "error",
1279
1330
  "unicorn/escape-case": "error",
1280
1331
  "unicorn/no-new-buffer": "error",
@@ -1285,7 +1336,6 @@ var unicorn = (options = {}) => [
1285
1336
  "unicorn/no-unnecessary-await": "error",
1286
1337
  "unicorn/switch-case-braces": ["error", "avoid"],
1287
1338
  "unicorn/no-typeof-undefined": "error",
1288
- "unicorn/prefer-set-size": "error",
1289
1339
  "unicorn/prefer-regexp-test": "error",
1290
1340
  "unicorn/no-static-only-class": "error",
1291
1341
  "unicorn/no-zero-fractions": "error",
@@ -1305,6 +1355,7 @@ var unicorn = (options = {}) => [
1305
1355
  "unicorn/prefer-prototype-methods": "error",
1306
1356
  "unicorn/prefer-reflect-apply": "error",
1307
1357
  "unicorn/prefer-math-min-max": "error",
1358
+ "unicorn/prefer-structured-clone": "error",
1308
1359
  "unicorn/consistent-existence-index-check": "error",
1309
1360
  "unicorn/catch-error-name": [
1310
1361
  "error",
@@ -1315,6 +1366,7 @@ var unicorn = (options = {}) => [
1315
1366
  ],
1316
1367
  "unicorn/prefer-date-now": "error",
1317
1368
  // String
1369
+ "unicorn/prefer-code-point": "error",
1318
1370
  "unicorn/prefer-string-slice": "error",
1319
1371
  "unicorn/prefer-string-trim-start-end": "error",
1320
1372
  "unicorn/prefer-string-starts-ends-with": "error",
@@ -1336,6 +1388,11 @@ var unicorn = (options = {}) => [
1336
1388
  "unicorn/prefer-array-some": "error",
1337
1389
  "unicorn/prefer-array-flat-map": "error",
1338
1390
  "unicorn/prefer-array-index-of": "error",
1391
+ "unicorn/require-array-join-separator": "error",
1392
+ // Set
1393
+ "unicorn/prefer-set-has": "error",
1394
+ "unicorn/prefer-set-size": "error",
1395
+ ...disabledRules2,
1339
1396
  // Overrides rules
1340
1397
  ...options.overrides
1341
1398
  }
package/dist/index.d.cts CHANGED
@@ -4645,6 +4645,317 @@ interface RuleOptions {
4645
4645
  * @see https://eslint.org/docs/latest/rules/vars-on-top
4646
4646
  */
4647
4647
  'vars-on-top'?: Linter.RuleEntry<[]>;
4648
+ /**
4649
+ * require .spec test file pattern
4650
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/consistent-test-filename.md
4651
+ */
4652
+ 'vitest/consistent-test-filename'?: Linter.RuleEntry<VitestConsistentTestFilename>;
4653
+ /**
4654
+ * enforce using test or it but not both
4655
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/consistent-test-it.md
4656
+ */
4657
+ 'vitest/consistent-test-it'?: Linter.RuleEntry<VitestConsistentTestIt>;
4658
+ /**
4659
+ * enforce having expectation in test body
4660
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/expect-expect.md
4661
+ */
4662
+ 'vitest/expect-expect'?: Linter.RuleEntry<VitestExpectExpect>;
4663
+ /**
4664
+ * enforce a maximum number of expect per test
4665
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/max-expects.md
4666
+ */
4667
+ 'vitest/max-expects'?: Linter.RuleEntry<VitestMaxExpects>;
4668
+ /**
4669
+ * require describe block to be less than set max value or default value
4670
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/max-nested-describe.md
4671
+ */
4672
+ 'vitest/max-nested-describe'?: Linter.RuleEntry<VitestMaxNestedDescribe>;
4673
+ /**
4674
+ * disallow alias methods
4675
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-alias-methods.md
4676
+ */
4677
+ 'vitest/no-alias-methods'?: Linter.RuleEntry<[]>;
4678
+ /**
4679
+ * disallow commented out tests
4680
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-commented-out-tests.md
4681
+ */
4682
+ 'vitest/no-commented-out-tests'?: Linter.RuleEntry<[]>;
4683
+ /**
4684
+ * disallow conditional expects
4685
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-conditional-expect.md
4686
+ */
4687
+ 'vitest/no-conditional-expect'?: Linter.RuleEntry<[]>;
4688
+ /**
4689
+ * disallow conditional tests
4690
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-conditional-in-test.md
4691
+ */
4692
+ 'vitest/no-conditional-in-test'?: Linter.RuleEntry<[]>;
4693
+ /**
4694
+ * disallow conditional tests
4695
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-conditional-tests.md
4696
+ */
4697
+ 'vitest/no-conditional-tests'?: Linter.RuleEntry<[]>;
4698
+ /**
4699
+ * disallow disabled tests
4700
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-disabled-tests.md
4701
+ */
4702
+ 'vitest/no-disabled-tests'?: Linter.RuleEntry<[]>;
4703
+ /**
4704
+ * disallow using a callback in asynchronous tests and hooks
4705
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-done-callback.md
4706
+ * @deprecated
4707
+ */
4708
+ 'vitest/no-done-callback'?: Linter.RuleEntry<[]>;
4709
+ /**
4710
+ * disallow duplicate hooks and teardown hooks
4711
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-duplicate-hooks.md
4712
+ */
4713
+ 'vitest/no-duplicate-hooks'?: Linter.RuleEntry<[]>;
4714
+ /**
4715
+ * disallow focused tests
4716
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-focused-tests.md
4717
+ */
4718
+ 'vitest/no-focused-tests'?: Linter.RuleEntry<VitestNoFocusedTests>;
4719
+ /**
4720
+ * disallow setup and teardown hooks
4721
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-hooks.md
4722
+ */
4723
+ 'vitest/no-hooks'?: Linter.RuleEntry<VitestNoHooks>;
4724
+ /**
4725
+ * disallow identical titles
4726
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-identical-title.md
4727
+ */
4728
+ 'vitest/no-identical-title'?: Linter.RuleEntry<[]>;
4729
+ /**
4730
+ * disallow importing `node:test`
4731
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-import-node-test.md
4732
+ */
4733
+ 'vitest/no-import-node-test'?: Linter.RuleEntry<[]>;
4734
+ /**
4735
+ * disallow string interpolation in snapshots
4736
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-interpolation-in-snapshots.md
4737
+ */
4738
+ 'vitest/no-interpolation-in-snapshots'?: Linter.RuleEntry<[]>;
4739
+ /**
4740
+ * disallow large snapshots
4741
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-large-snapshots.md
4742
+ */
4743
+ 'vitest/no-large-snapshots'?: Linter.RuleEntry<VitestNoLargeSnapshots>;
4744
+ /**
4745
+ * disallow importing from __mocks__ directory
4746
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-mocks-import.md
4747
+ */
4748
+ 'vitest/no-mocks-import'?: Linter.RuleEntry<[]>;
4749
+ /**
4750
+ * disallow the use of certain matchers
4751
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-restricted-matchers.md
4752
+ */
4753
+ 'vitest/no-restricted-matchers'?: Linter.RuleEntry<VitestNoRestrictedMatchers>;
4754
+ /**
4755
+ * disallow specific `vi.` methods
4756
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-restricted-vi-methods.md
4757
+ */
4758
+ 'vitest/no-restricted-vi-methods'?: Linter.RuleEntry<VitestNoRestrictedViMethods>;
4759
+ /**
4760
+ * disallow using `expect` outside of `it` or `test` blocks
4761
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-standalone-expect.md
4762
+ */
4763
+ 'vitest/no-standalone-expect'?: Linter.RuleEntry<VitestNoStandaloneExpect>;
4764
+ /**
4765
+ * disallow using `test` as a prefix
4766
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-test-prefixes.md
4767
+ */
4768
+ 'vitest/no-test-prefixes'?: Linter.RuleEntry<[]>;
4769
+ /**
4770
+ * disallow return statements in tests
4771
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-test-return-statement.md
4772
+ */
4773
+ 'vitest/no-test-return-statement'?: Linter.RuleEntry<[]>;
4774
+ /**
4775
+ * Enforce padding around `afterAll` blocks
4776
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/padding-around-after-all-blocks.md
4777
+ */
4778
+ 'vitest/padding-around-after-all-blocks'?: Linter.RuleEntry<[]>;
4779
+ /**
4780
+ * Enforce padding around `afterEach` blocks
4781
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/padding-around-after-each-blocks.md
4782
+ */
4783
+ 'vitest/padding-around-after-each-blocks'?: Linter.RuleEntry<[]>;
4784
+ /**
4785
+ * Enforce padding around vitest functions
4786
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/padding-around-all.md
4787
+ */
4788
+ 'vitest/padding-around-all'?: Linter.RuleEntry<[]>;
4789
+ /**
4790
+ * Enforce padding around `beforeAll` blocks
4791
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/padding-around-before-all-blocks.md
4792
+ */
4793
+ 'vitest/padding-around-before-all-blocks'?: Linter.RuleEntry<[]>;
4794
+ /**
4795
+ * Enforce padding around `beforeEach` blocks
4796
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/padding-around-before-each-blocks.md
4797
+ */
4798
+ 'vitest/padding-around-before-each-blocks'?: Linter.RuleEntry<[]>;
4799
+ /**
4800
+ * Enforce padding around `describe` blocks
4801
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/padding-around-describe-blocks.md
4802
+ */
4803
+ 'vitest/padding-around-describe-blocks'?: Linter.RuleEntry<[]>;
4804
+ /**
4805
+ * Enforce padding around `expect` groups
4806
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/padding-around-expect-groups.md
4807
+ */
4808
+ 'vitest/padding-around-expect-groups'?: Linter.RuleEntry<[]>;
4809
+ /**
4810
+ * Enforce padding around afterAll blocks
4811
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/padding-around-test-blocks.md
4812
+ */
4813
+ 'vitest/padding-around-test-blocks'?: Linter.RuleEntry<[]>;
4814
+ /**
4815
+ * enforce using `toBeCalledWith()` or `toHaveBeenCalledWith()`
4816
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-called-with.md
4817
+ */
4818
+ 'vitest/prefer-called-with'?: Linter.RuleEntry<[]>;
4819
+ /**
4820
+ * enforce using the built-in comparison matchers
4821
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-comparison-matcher.md
4822
+ */
4823
+ 'vitest/prefer-comparison-matcher'?: Linter.RuleEntry<[]>;
4824
+ /**
4825
+ * enforce using `each` rather than manual loops
4826
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-each.md
4827
+ */
4828
+ 'vitest/prefer-each'?: Linter.RuleEntry<[]>;
4829
+ /**
4830
+ * enforce using the built-in quality matchers
4831
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-equality-matcher.md
4832
+ */
4833
+ 'vitest/prefer-equality-matcher'?: Linter.RuleEntry<[]>;
4834
+ /**
4835
+ * enforce using expect assertions instead of callbacks
4836
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-expect-assertions.md
4837
+ */
4838
+ 'vitest/prefer-expect-assertions'?: Linter.RuleEntry<VitestPreferExpectAssertions>;
4839
+ /**
4840
+ * enforce using `expect().resolves` over `expect(await ...)` syntax
4841
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-expect-resolves.md
4842
+ */
4843
+ 'vitest/prefer-expect-resolves'?: Linter.RuleEntry<[]>;
4844
+ /**
4845
+ * enforce having hooks in consistent order
4846
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-hooks-in-order.md
4847
+ */
4848
+ 'vitest/prefer-hooks-in-order'?: Linter.RuleEntry<[]>;
4849
+ /**
4850
+ * enforce having hooks before any test cases
4851
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-hooks-on-top.md
4852
+ */
4853
+ 'vitest/prefer-hooks-on-top'?: Linter.RuleEntry<[]>;
4854
+ /**
4855
+ * enforce lowercase titles
4856
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-lowercase-title.md
4857
+ */
4858
+ 'vitest/prefer-lowercase-title'?: Linter.RuleEntry<VitestPreferLowercaseTitle>;
4859
+ /**
4860
+ * enforce mock resolved/rejected shorthands for promises
4861
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-mock-promise-shorthand.md
4862
+ */
4863
+ 'vitest/prefer-mock-promise-shorthand'?: Linter.RuleEntry<[]>;
4864
+ /**
4865
+ * enforce including a hint with external snapshots
4866
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-snapshot-hint.md
4867
+ */
4868
+ 'vitest/prefer-snapshot-hint'?: Linter.RuleEntry<VitestPreferSnapshotHint>;
4869
+ /**
4870
+ * enforce using `vi.spyOn`
4871
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-spy-on.md
4872
+ */
4873
+ 'vitest/prefer-spy-on'?: Linter.RuleEntry<[]>;
4874
+ /**
4875
+ * enforce strict equal over equal
4876
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-strict-equal.md
4877
+ */
4878
+ 'vitest/prefer-strict-equal'?: Linter.RuleEntry<[]>;
4879
+ /**
4880
+ * enforce using toBe()
4881
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-to-be.md
4882
+ */
4883
+ 'vitest/prefer-to-be'?: Linter.RuleEntry<[]>;
4884
+ /**
4885
+ * enforce using toBeFalsy()
4886
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-to-be-falsy.md
4887
+ */
4888
+ 'vitest/prefer-to-be-falsy'?: Linter.RuleEntry<[]>;
4889
+ /**
4890
+ * enforce using toBeObject()
4891
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-to-be-object.md
4892
+ */
4893
+ 'vitest/prefer-to-be-object'?: Linter.RuleEntry<[]>;
4894
+ /**
4895
+ * enforce using `toBeTruthy`
4896
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-to-be-truthy.md
4897
+ */
4898
+ 'vitest/prefer-to-be-truthy'?: Linter.RuleEntry<[]>;
4899
+ /**
4900
+ * enforce using toContain()
4901
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-to-contain.md
4902
+ */
4903
+ 'vitest/prefer-to-contain'?: Linter.RuleEntry<[]>;
4904
+ /**
4905
+ * enforce using toHaveLength()
4906
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-to-have-length.md
4907
+ */
4908
+ 'vitest/prefer-to-have-length'?: Linter.RuleEntry<[]>;
4909
+ /**
4910
+ * enforce using `test.todo`
4911
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-todo.md
4912
+ */
4913
+ 'vitest/prefer-todo'?: Linter.RuleEntry<[]>;
4914
+ /**
4915
+ * Prefer `vi.mocked()` over `fn as Mock`
4916
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-vi-mocked.md
4917
+ */
4918
+ 'vitest/prefer-vi-mocked'?: Linter.RuleEntry<[]>;
4919
+ /**
4920
+ * require setup and teardown to be within a hook
4921
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/require-hook.md
4922
+ */
4923
+ 'vitest/require-hook'?: Linter.RuleEntry<VitestRequireHook>;
4924
+ /**
4925
+ * require local Test Context for concurrent snapshot tests
4926
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/require-local-test-context-for-concurrent-snapshots.md
4927
+ */
4928
+ 'vitest/require-local-test-context-for-concurrent-snapshots'?: Linter.RuleEntry<[]>;
4929
+ /**
4930
+ * require toThrow() to be called with an error message
4931
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/require-to-throw-message.md
4932
+ */
4933
+ 'vitest/require-to-throw-message'?: Linter.RuleEntry<[]>;
4934
+ /**
4935
+ * enforce that all tests are in a top-level describe
4936
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/require-top-level-describe.md
4937
+ */
4938
+ 'vitest/require-top-level-describe'?: Linter.RuleEntry<VitestRequireTopLevelDescribe>;
4939
+ /**
4940
+ * enforce valid describe callback
4941
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/valid-describe-callback.md
4942
+ */
4943
+ 'vitest/valid-describe-callback'?: Linter.RuleEntry<[]>;
4944
+ /**
4945
+ * enforce valid `expect()` usage
4946
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/valid-expect.md
4947
+ */
4948
+ 'vitest/valid-expect'?: Linter.RuleEntry<VitestValidExpect>;
4949
+ /**
4950
+ * Require promises that have expectations in their chain to be valid
4951
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/valid-expect-in-promise.md
4952
+ */
4953
+ 'vitest/valid-expect-in-promise'?: Linter.RuleEntry<[]>;
4954
+ /**
4955
+ * enforce valid titles
4956
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/valid-title.md
4957
+ */
4958
+ 'vitest/valid-title'?: Linter.RuleEntry<VitestValidTitle>;
4648
4959
  /**
4649
4960
  * Enforce linebreaks after opening and before closing array brackets in `<template>`
4650
4961
  * @see https://eslint.vuejs.org/rules/array-bracket-newline.html
@@ -10821,6 +11132,116 @@ type ValidTypeof = [] | [
10821
11132
  requireStringLiterals?: boolean;
10822
11133
  }
10823
11134
  ];
11135
+ type VitestConsistentTestFilename = [] | [
11136
+ {
11137
+ pattern?: string;
11138
+ allTestPattern?: string;
11139
+ }
11140
+ ];
11141
+ type VitestConsistentTestIt = [] | [
11142
+ {
11143
+ fn?: ("test" | "it");
11144
+ withinDescribe?: ("test" | "it");
11145
+ }
11146
+ ];
11147
+ type VitestExpectExpect = [] | [
11148
+ {
11149
+ assertFunctionNames?: string[];
11150
+ additionalTestBlockFunctions?: string[];
11151
+ }
11152
+ ];
11153
+ type VitestMaxExpects = [] | [
11154
+ {
11155
+ max?: number;
11156
+ }
11157
+ ];
11158
+ type VitestMaxNestedDescribe = [] | [
11159
+ {
11160
+ max?: number;
11161
+ }
11162
+ ];
11163
+ type VitestNoFocusedTests = [] | [
11164
+ {
11165
+ fixable?: boolean;
11166
+ }
11167
+ ];
11168
+ type VitestNoHooks = [] | [
11169
+ {
11170
+ allow?: unknown[];
11171
+ }
11172
+ ];
11173
+ type VitestNoLargeSnapshots = [] | [
11174
+ {
11175
+ maxSize?: number;
11176
+ inlineMaxSize?: number;
11177
+ allowedSnapshots?: {
11178
+ [k: string]: unknown[] | undefined;
11179
+ };
11180
+ }
11181
+ ];
11182
+ type VitestNoRestrictedMatchers = [] | [
11183
+ {
11184
+ [k: string]: (string | null) | undefined;
11185
+ }
11186
+ ];
11187
+ type VitestNoRestrictedViMethods = [] | [
11188
+ {
11189
+ [k: string]: (string | null) | undefined;
11190
+ }
11191
+ ];
11192
+ type VitestNoStandaloneExpect = [] | [
11193
+ {
11194
+ additionaltestblockfunctions?: string[];
11195
+ [k: string]: unknown | undefined;
11196
+ }
11197
+ ];
11198
+ type VitestPreferExpectAssertions = [] | [
11199
+ {
11200
+ onlyFunctionsWithAsyncKeyword?: boolean;
11201
+ onlyFunctionsWithExpectInLoop?: boolean;
11202
+ onlyFunctionsWithExpectInCallback?: boolean;
11203
+ }
11204
+ ];
11205
+ type VitestPreferLowercaseTitle = [] | [
11206
+ {
11207
+ ignore?: ("describe" | "test" | "it")[];
11208
+ allowedPrefixes?: string[];
11209
+ ignoreTopLevelDescribe?: boolean;
11210
+ lowercaseFirstCharacterOnly?: boolean;
11211
+ }
11212
+ ];
11213
+ type VitestPreferSnapshotHint = [] | [("always" | "multi")];
11214
+ type VitestRequireHook = [] | [
11215
+ {
11216
+ allowedFunctionCalls?: string[];
11217
+ }
11218
+ ];
11219
+ type VitestRequireTopLevelDescribe = [] | [
11220
+ {
11221
+ maxNumberOfTopLevelDescribes?: number;
11222
+ }
11223
+ ];
11224
+ type VitestValidExpect = [] | [
11225
+ {
11226
+ alwaysAwait?: boolean;
11227
+ asyncMatchers?: string[];
11228
+ minArgs?: number;
11229
+ maxArgs?: number;
11230
+ }
11231
+ ];
11232
+ type VitestValidTitle = [] | [
11233
+ {
11234
+ ignoreTypeOfDescribeName?: boolean;
11235
+ allowArguments?: boolean;
11236
+ disallowedWords?: string[];
11237
+ mustMatch?: (string | [string] | [string, string] | {
11238
+ [k: string]: (string | [string] | [string, string]) | undefined;
11239
+ });
11240
+ mustNotMatch?: (string | [string] | [string, string] | {
11241
+ [k: string]: (string | [string] | [string, string]) | undefined;
11242
+ });
11243
+ }
11244
+ ];
10824
11245
  type VueArrayBracketNewline = [] | [
10825
11246
  (("always" | "never" | "consistent") | {
10826
11247
  multiline?: boolean;
@@ -12340,7 +12761,7 @@ type Yoda = [] | [("always" | "never")] | [
12340
12761
  onlyEquality?: boolean;
12341
12762
  }
12342
12763
  ];
12343
- type ConfigNames = 'ntnyq/antfu' | 'ntnyq/command' | 'ntnyq/eslint-comments' | 'ntnyq/ignores' | 'ntnyq/imports' | 'ntnyq/gitignore' | 'ntnyq/js/recommended' | 'ntnyq/js/core' | 'ntnyq/jsdoc' | 'ntnyq/jsonc' | 'ntnyq/jsx' | 'ntnyq/markdown/recommended/plugin' | 'ntnyq/markdown/recommended/processor' | 'ntnyq/markdown/recommended/code-blocks' | 'ntnyq/markdown/disabled/code-blocks' | 'ntnyq/node' | 'ntnyq/ntnyq' | 'ntnyq/prettier' | 'ntnyq/prettier/disabled' | 'ntnyq/regexp' | 'ntnyq/perfectionist' | 'ntnyq/ts/core__typescript-eslint/base' | 'ntnyq/ts/core__typescript-eslint/eslint-recommended' | 'ntnyq/ts/core__typescript-eslint/recommended' | 'ntnyq/ts/core' | 'ntnyq/ts/types' | 'ntnyq/unused-imports' | 'ntnyq/unicorn' | 'ntnyq/unocss' | 'ntnyq/sort/tsconfig' | 'ntnyq/sort/package-json' | 'ntnyq/sort/i18n-locale/json' | 'ntnyq/sort/i18n-locale/yaml' | 'ntnyq/sort/pnpm-workspace' | 'ntnyq/vue/ts__ntnyq/ts/core__typescript-eslint/base' | 'ntnyq/vue/ts__ntnyq/ts/core__typescript-eslint/eslint-recommended' | 'ntnyq/vue/ts__ntnyq/ts/core__typescript-eslint/recommended' | 'ntnyq/vue/ts__ntnyq/ts/core' | 'ntnyq/vue/ts' | 'ntnyq/vue/core' | 'ntnyq/yaml' | 'ntnyq/toml' | 'ntnyq/specials/scripts' | 'ntnyq/specials/cli' | 'ntnyq/specials/userscript';
12764
+ type ConfigNames = 'ntnyq/antfu' | 'ntnyq/command' | 'ntnyq/eslint-comments' | 'ntnyq/ignores' | 'ntnyq/imports' | 'ntnyq/gitignore' | 'ntnyq/js/recommended' | 'ntnyq/js/core' | 'ntnyq/jsdoc' | 'ntnyq/jsonc' | 'ntnyq/jsx' | 'ntnyq/markdown/recommended/plugin' | 'ntnyq/markdown/recommended/processor' | 'ntnyq/markdown/recommended/code-blocks' | 'ntnyq/markdown/disabled/code-blocks' | 'ntnyq/node' | 'ntnyq/ntnyq' | 'ntnyq/prettier' | 'ntnyq/prettier/disabled' | 'ntnyq/regexp' | 'ntnyq/perfectionist' | 'ntnyq/ts/core__typescript-eslint/base' | 'ntnyq/ts/core__typescript-eslint/eslint-recommended' | 'ntnyq/ts/core__typescript-eslint/recommended' | 'ntnyq/ts/core' | 'ntnyq/ts/types' | 'ntnyq/unused-imports' | 'ntnyq/unicorn' | 'ntnyq/unocss' | 'ntnyq/sort/tsconfig' | 'ntnyq/sort/package-json' | 'ntnyq/sort/i18n-locale/json' | 'ntnyq/sort/i18n-locale/yaml' | 'ntnyq/sort/pnpm-workspace' | 'ntnyq/vue/ts__ntnyq/ts/core__typescript-eslint/base' | 'ntnyq/vue/ts__ntnyq/ts/core__typescript-eslint/eslint-recommended' | 'ntnyq/vue/ts__ntnyq/ts/core__typescript-eslint/recommended' | 'ntnyq/vue/ts__ntnyq/ts/core' | 'ntnyq/vue/ts' | 'ntnyq/vue/core' | 'ntnyq/vitest' | 'ntnyq/yaml' | 'ntnyq/toml' | 'ntnyq/specials/scripts' | 'ntnyq/specials/cli' | 'ntnyq/specials/userscript';
12344
12765
 
12345
12766
  /**
12346
12767
  * Typed flat config item
package/dist/index.d.ts CHANGED
@@ -4645,6 +4645,317 @@ interface RuleOptions {
4645
4645
  * @see https://eslint.org/docs/latest/rules/vars-on-top
4646
4646
  */
4647
4647
  'vars-on-top'?: Linter.RuleEntry<[]>;
4648
+ /**
4649
+ * require .spec test file pattern
4650
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/consistent-test-filename.md
4651
+ */
4652
+ 'vitest/consistent-test-filename'?: Linter.RuleEntry<VitestConsistentTestFilename>;
4653
+ /**
4654
+ * enforce using test or it but not both
4655
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/consistent-test-it.md
4656
+ */
4657
+ 'vitest/consistent-test-it'?: Linter.RuleEntry<VitestConsistentTestIt>;
4658
+ /**
4659
+ * enforce having expectation in test body
4660
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/expect-expect.md
4661
+ */
4662
+ 'vitest/expect-expect'?: Linter.RuleEntry<VitestExpectExpect>;
4663
+ /**
4664
+ * enforce a maximum number of expect per test
4665
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/max-expects.md
4666
+ */
4667
+ 'vitest/max-expects'?: Linter.RuleEntry<VitestMaxExpects>;
4668
+ /**
4669
+ * require describe block to be less than set max value or default value
4670
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/max-nested-describe.md
4671
+ */
4672
+ 'vitest/max-nested-describe'?: Linter.RuleEntry<VitestMaxNestedDescribe>;
4673
+ /**
4674
+ * disallow alias methods
4675
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-alias-methods.md
4676
+ */
4677
+ 'vitest/no-alias-methods'?: Linter.RuleEntry<[]>;
4678
+ /**
4679
+ * disallow commented out tests
4680
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-commented-out-tests.md
4681
+ */
4682
+ 'vitest/no-commented-out-tests'?: Linter.RuleEntry<[]>;
4683
+ /**
4684
+ * disallow conditional expects
4685
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-conditional-expect.md
4686
+ */
4687
+ 'vitest/no-conditional-expect'?: Linter.RuleEntry<[]>;
4688
+ /**
4689
+ * disallow conditional tests
4690
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-conditional-in-test.md
4691
+ */
4692
+ 'vitest/no-conditional-in-test'?: Linter.RuleEntry<[]>;
4693
+ /**
4694
+ * disallow conditional tests
4695
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-conditional-tests.md
4696
+ */
4697
+ 'vitest/no-conditional-tests'?: Linter.RuleEntry<[]>;
4698
+ /**
4699
+ * disallow disabled tests
4700
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-disabled-tests.md
4701
+ */
4702
+ 'vitest/no-disabled-tests'?: Linter.RuleEntry<[]>;
4703
+ /**
4704
+ * disallow using a callback in asynchronous tests and hooks
4705
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-done-callback.md
4706
+ * @deprecated
4707
+ */
4708
+ 'vitest/no-done-callback'?: Linter.RuleEntry<[]>;
4709
+ /**
4710
+ * disallow duplicate hooks and teardown hooks
4711
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-duplicate-hooks.md
4712
+ */
4713
+ 'vitest/no-duplicate-hooks'?: Linter.RuleEntry<[]>;
4714
+ /**
4715
+ * disallow focused tests
4716
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-focused-tests.md
4717
+ */
4718
+ 'vitest/no-focused-tests'?: Linter.RuleEntry<VitestNoFocusedTests>;
4719
+ /**
4720
+ * disallow setup and teardown hooks
4721
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-hooks.md
4722
+ */
4723
+ 'vitest/no-hooks'?: Linter.RuleEntry<VitestNoHooks>;
4724
+ /**
4725
+ * disallow identical titles
4726
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-identical-title.md
4727
+ */
4728
+ 'vitest/no-identical-title'?: Linter.RuleEntry<[]>;
4729
+ /**
4730
+ * disallow importing `node:test`
4731
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-import-node-test.md
4732
+ */
4733
+ 'vitest/no-import-node-test'?: Linter.RuleEntry<[]>;
4734
+ /**
4735
+ * disallow string interpolation in snapshots
4736
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-interpolation-in-snapshots.md
4737
+ */
4738
+ 'vitest/no-interpolation-in-snapshots'?: Linter.RuleEntry<[]>;
4739
+ /**
4740
+ * disallow large snapshots
4741
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-large-snapshots.md
4742
+ */
4743
+ 'vitest/no-large-snapshots'?: Linter.RuleEntry<VitestNoLargeSnapshots>;
4744
+ /**
4745
+ * disallow importing from __mocks__ directory
4746
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-mocks-import.md
4747
+ */
4748
+ 'vitest/no-mocks-import'?: Linter.RuleEntry<[]>;
4749
+ /**
4750
+ * disallow the use of certain matchers
4751
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-restricted-matchers.md
4752
+ */
4753
+ 'vitest/no-restricted-matchers'?: Linter.RuleEntry<VitestNoRestrictedMatchers>;
4754
+ /**
4755
+ * disallow specific `vi.` methods
4756
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-restricted-vi-methods.md
4757
+ */
4758
+ 'vitest/no-restricted-vi-methods'?: Linter.RuleEntry<VitestNoRestrictedViMethods>;
4759
+ /**
4760
+ * disallow using `expect` outside of `it` or `test` blocks
4761
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-standalone-expect.md
4762
+ */
4763
+ 'vitest/no-standalone-expect'?: Linter.RuleEntry<VitestNoStandaloneExpect>;
4764
+ /**
4765
+ * disallow using `test` as a prefix
4766
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-test-prefixes.md
4767
+ */
4768
+ 'vitest/no-test-prefixes'?: Linter.RuleEntry<[]>;
4769
+ /**
4770
+ * disallow return statements in tests
4771
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-test-return-statement.md
4772
+ */
4773
+ 'vitest/no-test-return-statement'?: Linter.RuleEntry<[]>;
4774
+ /**
4775
+ * Enforce padding around `afterAll` blocks
4776
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/padding-around-after-all-blocks.md
4777
+ */
4778
+ 'vitest/padding-around-after-all-blocks'?: Linter.RuleEntry<[]>;
4779
+ /**
4780
+ * Enforce padding around `afterEach` blocks
4781
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/padding-around-after-each-blocks.md
4782
+ */
4783
+ 'vitest/padding-around-after-each-blocks'?: Linter.RuleEntry<[]>;
4784
+ /**
4785
+ * Enforce padding around vitest functions
4786
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/padding-around-all.md
4787
+ */
4788
+ 'vitest/padding-around-all'?: Linter.RuleEntry<[]>;
4789
+ /**
4790
+ * Enforce padding around `beforeAll` blocks
4791
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/padding-around-before-all-blocks.md
4792
+ */
4793
+ 'vitest/padding-around-before-all-blocks'?: Linter.RuleEntry<[]>;
4794
+ /**
4795
+ * Enforce padding around `beforeEach` blocks
4796
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/padding-around-before-each-blocks.md
4797
+ */
4798
+ 'vitest/padding-around-before-each-blocks'?: Linter.RuleEntry<[]>;
4799
+ /**
4800
+ * Enforce padding around `describe` blocks
4801
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/padding-around-describe-blocks.md
4802
+ */
4803
+ 'vitest/padding-around-describe-blocks'?: Linter.RuleEntry<[]>;
4804
+ /**
4805
+ * Enforce padding around `expect` groups
4806
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/padding-around-expect-groups.md
4807
+ */
4808
+ 'vitest/padding-around-expect-groups'?: Linter.RuleEntry<[]>;
4809
+ /**
4810
+ * Enforce padding around afterAll blocks
4811
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/padding-around-test-blocks.md
4812
+ */
4813
+ 'vitest/padding-around-test-blocks'?: Linter.RuleEntry<[]>;
4814
+ /**
4815
+ * enforce using `toBeCalledWith()` or `toHaveBeenCalledWith()`
4816
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-called-with.md
4817
+ */
4818
+ 'vitest/prefer-called-with'?: Linter.RuleEntry<[]>;
4819
+ /**
4820
+ * enforce using the built-in comparison matchers
4821
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-comparison-matcher.md
4822
+ */
4823
+ 'vitest/prefer-comparison-matcher'?: Linter.RuleEntry<[]>;
4824
+ /**
4825
+ * enforce using `each` rather than manual loops
4826
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-each.md
4827
+ */
4828
+ 'vitest/prefer-each'?: Linter.RuleEntry<[]>;
4829
+ /**
4830
+ * enforce using the built-in quality matchers
4831
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-equality-matcher.md
4832
+ */
4833
+ 'vitest/prefer-equality-matcher'?: Linter.RuleEntry<[]>;
4834
+ /**
4835
+ * enforce using expect assertions instead of callbacks
4836
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-expect-assertions.md
4837
+ */
4838
+ 'vitest/prefer-expect-assertions'?: Linter.RuleEntry<VitestPreferExpectAssertions>;
4839
+ /**
4840
+ * enforce using `expect().resolves` over `expect(await ...)` syntax
4841
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-expect-resolves.md
4842
+ */
4843
+ 'vitest/prefer-expect-resolves'?: Linter.RuleEntry<[]>;
4844
+ /**
4845
+ * enforce having hooks in consistent order
4846
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-hooks-in-order.md
4847
+ */
4848
+ 'vitest/prefer-hooks-in-order'?: Linter.RuleEntry<[]>;
4849
+ /**
4850
+ * enforce having hooks before any test cases
4851
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-hooks-on-top.md
4852
+ */
4853
+ 'vitest/prefer-hooks-on-top'?: Linter.RuleEntry<[]>;
4854
+ /**
4855
+ * enforce lowercase titles
4856
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-lowercase-title.md
4857
+ */
4858
+ 'vitest/prefer-lowercase-title'?: Linter.RuleEntry<VitestPreferLowercaseTitle>;
4859
+ /**
4860
+ * enforce mock resolved/rejected shorthands for promises
4861
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-mock-promise-shorthand.md
4862
+ */
4863
+ 'vitest/prefer-mock-promise-shorthand'?: Linter.RuleEntry<[]>;
4864
+ /**
4865
+ * enforce including a hint with external snapshots
4866
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-snapshot-hint.md
4867
+ */
4868
+ 'vitest/prefer-snapshot-hint'?: Linter.RuleEntry<VitestPreferSnapshotHint>;
4869
+ /**
4870
+ * enforce using `vi.spyOn`
4871
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-spy-on.md
4872
+ */
4873
+ 'vitest/prefer-spy-on'?: Linter.RuleEntry<[]>;
4874
+ /**
4875
+ * enforce strict equal over equal
4876
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-strict-equal.md
4877
+ */
4878
+ 'vitest/prefer-strict-equal'?: Linter.RuleEntry<[]>;
4879
+ /**
4880
+ * enforce using toBe()
4881
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-to-be.md
4882
+ */
4883
+ 'vitest/prefer-to-be'?: Linter.RuleEntry<[]>;
4884
+ /**
4885
+ * enforce using toBeFalsy()
4886
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-to-be-falsy.md
4887
+ */
4888
+ 'vitest/prefer-to-be-falsy'?: Linter.RuleEntry<[]>;
4889
+ /**
4890
+ * enforce using toBeObject()
4891
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-to-be-object.md
4892
+ */
4893
+ 'vitest/prefer-to-be-object'?: Linter.RuleEntry<[]>;
4894
+ /**
4895
+ * enforce using `toBeTruthy`
4896
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-to-be-truthy.md
4897
+ */
4898
+ 'vitest/prefer-to-be-truthy'?: Linter.RuleEntry<[]>;
4899
+ /**
4900
+ * enforce using toContain()
4901
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-to-contain.md
4902
+ */
4903
+ 'vitest/prefer-to-contain'?: Linter.RuleEntry<[]>;
4904
+ /**
4905
+ * enforce using toHaveLength()
4906
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-to-have-length.md
4907
+ */
4908
+ 'vitest/prefer-to-have-length'?: Linter.RuleEntry<[]>;
4909
+ /**
4910
+ * enforce using `test.todo`
4911
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-todo.md
4912
+ */
4913
+ 'vitest/prefer-todo'?: Linter.RuleEntry<[]>;
4914
+ /**
4915
+ * Prefer `vi.mocked()` over `fn as Mock`
4916
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-vi-mocked.md
4917
+ */
4918
+ 'vitest/prefer-vi-mocked'?: Linter.RuleEntry<[]>;
4919
+ /**
4920
+ * require setup and teardown to be within a hook
4921
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/require-hook.md
4922
+ */
4923
+ 'vitest/require-hook'?: Linter.RuleEntry<VitestRequireHook>;
4924
+ /**
4925
+ * require local Test Context for concurrent snapshot tests
4926
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/require-local-test-context-for-concurrent-snapshots.md
4927
+ */
4928
+ 'vitest/require-local-test-context-for-concurrent-snapshots'?: Linter.RuleEntry<[]>;
4929
+ /**
4930
+ * require toThrow() to be called with an error message
4931
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/require-to-throw-message.md
4932
+ */
4933
+ 'vitest/require-to-throw-message'?: Linter.RuleEntry<[]>;
4934
+ /**
4935
+ * enforce that all tests are in a top-level describe
4936
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/require-top-level-describe.md
4937
+ */
4938
+ 'vitest/require-top-level-describe'?: Linter.RuleEntry<VitestRequireTopLevelDescribe>;
4939
+ /**
4940
+ * enforce valid describe callback
4941
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/valid-describe-callback.md
4942
+ */
4943
+ 'vitest/valid-describe-callback'?: Linter.RuleEntry<[]>;
4944
+ /**
4945
+ * enforce valid `expect()` usage
4946
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/valid-expect.md
4947
+ */
4948
+ 'vitest/valid-expect'?: Linter.RuleEntry<VitestValidExpect>;
4949
+ /**
4950
+ * Require promises that have expectations in their chain to be valid
4951
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/valid-expect-in-promise.md
4952
+ */
4953
+ 'vitest/valid-expect-in-promise'?: Linter.RuleEntry<[]>;
4954
+ /**
4955
+ * enforce valid titles
4956
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/valid-title.md
4957
+ */
4958
+ 'vitest/valid-title'?: Linter.RuleEntry<VitestValidTitle>;
4648
4959
  /**
4649
4960
  * Enforce linebreaks after opening and before closing array brackets in `<template>`
4650
4961
  * @see https://eslint.vuejs.org/rules/array-bracket-newline.html
@@ -10821,6 +11132,116 @@ type ValidTypeof = [] | [
10821
11132
  requireStringLiterals?: boolean;
10822
11133
  }
10823
11134
  ];
11135
+ type VitestConsistentTestFilename = [] | [
11136
+ {
11137
+ pattern?: string;
11138
+ allTestPattern?: string;
11139
+ }
11140
+ ];
11141
+ type VitestConsistentTestIt = [] | [
11142
+ {
11143
+ fn?: ("test" | "it");
11144
+ withinDescribe?: ("test" | "it");
11145
+ }
11146
+ ];
11147
+ type VitestExpectExpect = [] | [
11148
+ {
11149
+ assertFunctionNames?: string[];
11150
+ additionalTestBlockFunctions?: string[];
11151
+ }
11152
+ ];
11153
+ type VitestMaxExpects = [] | [
11154
+ {
11155
+ max?: number;
11156
+ }
11157
+ ];
11158
+ type VitestMaxNestedDescribe = [] | [
11159
+ {
11160
+ max?: number;
11161
+ }
11162
+ ];
11163
+ type VitestNoFocusedTests = [] | [
11164
+ {
11165
+ fixable?: boolean;
11166
+ }
11167
+ ];
11168
+ type VitestNoHooks = [] | [
11169
+ {
11170
+ allow?: unknown[];
11171
+ }
11172
+ ];
11173
+ type VitestNoLargeSnapshots = [] | [
11174
+ {
11175
+ maxSize?: number;
11176
+ inlineMaxSize?: number;
11177
+ allowedSnapshots?: {
11178
+ [k: string]: unknown[] | undefined;
11179
+ };
11180
+ }
11181
+ ];
11182
+ type VitestNoRestrictedMatchers = [] | [
11183
+ {
11184
+ [k: string]: (string | null) | undefined;
11185
+ }
11186
+ ];
11187
+ type VitestNoRestrictedViMethods = [] | [
11188
+ {
11189
+ [k: string]: (string | null) | undefined;
11190
+ }
11191
+ ];
11192
+ type VitestNoStandaloneExpect = [] | [
11193
+ {
11194
+ additionaltestblockfunctions?: string[];
11195
+ [k: string]: unknown | undefined;
11196
+ }
11197
+ ];
11198
+ type VitestPreferExpectAssertions = [] | [
11199
+ {
11200
+ onlyFunctionsWithAsyncKeyword?: boolean;
11201
+ onlyFunctionsWithExpectInLoop?: boolean;
11202
+ onlyFunctionsWithExpectInCallback?: boolean;
11203
+ }
11204
+ ];
11205
+ type VitestPreferLowercaseTitle = [] | [
11206
+ {
11207
+ ignore?: ("describe" | "test" | "it")[];
11208
+ allowedPrefixes?: string[];
11209
+ ignoreTopLevelDescribe?: boolean;
11210
+ lowercaseFirstCharacterOnly?: boolean;
11211
+ }
11212
+ ];
11213
+ type VitestPreferSnapshotHint = [] | [("always" | "multi")];
11214
+ type VitestRequireHook = [] | [
11215
+ {
11216
+ allowedFunctionCalls?: string[];
11217
+ }
11218
+ ];
11219
+ type VitestRequireTopLevelDescribe = [] | [
11220
+ {
11221
+ maxNumberOfTopLevelDescribes?: number;
11222
+ }
11223
+ ];
11224
+ type VitestValidExpect = [] | [
11225
+ {
11226
+ alwaysAwait?: boolean;
11227
+ asyncMatchers?: string[];
11228
+ minArgs?: number;
11229
+ maxArgs?: number;
11230
+ }
11231
+ ];
11232
+ type VitestValidTitle = [] | [
11233
+ {
11234
+ ignoreTypeOfDescribeName?: boolean;
11235
+ allowArguments?: boolean;
11236
+ disallowedWords?: string[];
11237
+ mustMatch?: (string | [string] | [string, string] | {
11238
+ [k: string]: (string | [string] | [string, string]) | undefined;
11239
+ });
11240
+ mustNotMatch?: (string | [string] | [string, string] | {
11241
+ [k: string]: (string | [string] | [string, string]) | undefined;
11242
+ });
11243
+ }
11244
+ ];
10824
11245
  type VueArrayBracketNewline = [] | [
10825
11246
  (("always" | "never" | "consistent") | {
10826
11247
  multiline?: boolean;
@@ -12340,7 +12761,7 @@ type Yoda = [] | [("always" | "never")] | [
12340
12761
  onlyEquality?: boolean;
12341
12762
  }
12342
12763
  ];
12343
- type ConfigNames = 'ntnyq/antfu' | 'ntnyq/command' | 'ntnyq/eslint-comments' | 'ntnyq/ignores' | 'ntnyq/imports' | 'ntnyq/gitignore' | 'ntnyq/js/recommended' | 'ntnyq/js/core' | 'ntnyq/jsdoc' | 'ntnyq/jsonc' | 'ntnyq/jsx' | 'ntnyq/markdown/recommended/plugin' | 'ntnyq/markdown/recommended/processor' | 'ntnyq/markdown/recommended/code-blocks' | 'ntnyq/markdown/disabled/code-blocks' | 'ntnyq/node' | 'ntnyq/ntnyq' | 'ntnyq/prettier' | 'ntnyq/prettier/disabled' | 'ntnyq/regexp' | 'ntnyq/perfectionist' | 'ntnyq/ts/core__typescript-eslint/base' | 'ntnyq/ts/core__typescript-eslint/eslint-recommended' | 'ntnyq/ts/core__typescript-eslint/recommended' | 'ntnyq/ts/core' | 'ntnyq/ts/types' | 'ntnyq/unused-imports' | 'ntnyq/unicorn' | 'ntnyq/unocss' | 'ntnyq/sort/tsconfig' | 'ntnyq/sort/package-json' | 'ntnyq/sort/i18n-locale/json' | 'ntnyq/sort/i18n-locale/yaml' | 'ntnyq/sort/pnpm-workspace' | 'ntnyq/vue/ts__ntnyq/ts/core__typescript-eslint/base' | 'ntnyq/vue/ts__ntnyq/ts/core__typescript-eslint/eslint-recommended' | 'ntnyq/vue/ts__ntnyq/ts/core__typescript-eslint/recommended' | 'ntnyq/vue/ts__ntnyq/ts/core' | 'ntnyq/vue/ts' | 'ntnyq/vue/core' | 'ntnyq/yaml' | 'ntnyq/toml' | 'ntnyq/specials/scripts' | 'ntnyq/specials/cli' | 'ntnyq/specials/userscript';
12764
+ type ConfigNames = 'ntnyq/antfu' | 'ntnyq/command' | 'ntnyq/eslint-comments' | 'ntnyq/ignores' | 'ntnyq/imports' | 'ntnyq/gitignore' | 'ntnyq/js/recommended' | 'ntnyq/js/core' | 'ntnyq/jsdoc' | 'ntnyq/jsonc' | 'ntnyq/jsx' | 'ntnyq/markdown/recommended/plugin' | 'ntnyq/markdown/recommended/processor' | 'ntnyq/markdown/recommended/code-blocks' | 'ntnyq/markdown/disabled/code-blocks' | 'ntnyq/node' | 'ntnyq/ntnyq' | 'ntnyq/prettier' | 'ntnyq/prettier/disabled' | 'ntnyq/regexp' | 'ntnyq/perfectionist' | 'ntnyq/ts/core__typescript-eslint/base' | 'ntnyq/ts/core__typescript-eslint/eslint-recommended' | 'ntnyq/ts/core__typescript-eslint/recommended' | 'ntnyq/ts/core' | 'ntnyq/ts/types' | 'ntnyq/unused-imports' | 'ntnyq/unicorn' | 'ntnyq/unocss' | 'ntnyq/sort/tsconfig' | 'ntnyq/sort/package-json' | 'ntnyq/sort/i18n-locale/json' | 'ntnyq/sort/i18n-locale/yaml' | 'ntnyq/sort/pnpm-workspace' | 'ntnyq/vue/ts__ntnyq/ts/core__typescript-eslint/base' | 'ntnyq/vue/ts__ntnyq/ts/core__typescript-eslint/eslint-recommended' | 'ntnyq/vue/ts__ntnyq/ts/core__typescript-eslint/recommended' | 'ntnyq/vue/ts__ntnyq/ts/core' | 'ntnyq/vue/ts' | 'ntnyq/vue/core' | 'ntnyq/vitest' | 'ntnyq/yaml' | 'ntnyq/toml' | 'ntnyq/specials/scripts' | 'ntnyq/specials/cli' | 'ntnyq/specials/userscript';
12344
12765
 
12345
12766
  /**
12346
12767
  * Typed flat config item
package/dist/index.js CHANGED
@@ -318,29 +318,76 @@ var extensionRules = {
318
318
  ]
319
319
  };
320
320
  var unCategorizedRules = {
321
+ "vue/no-v-text": "error",
321
322
  "vue/no-useless-v-bind": "error",
322
323
  "vue/valid-define-options": "error",
323
324
  "vue/prefer-define-options": "error",
325
+ "vue/prefer-use-template-ref": "error",
324
326
  "vue/no-irregular-whitespace": "error",
325
327
  "vue/no-use-v-else-with-v-for": "error",
326
328
  "vue/no-deprecated-delete-set": "error",
329
+ "vue/no-empty-component-block": "error",
327
330
  "vue/require-typed-object-prop": "error",
328
331
  "vue/no-unused-emit-declarations": "error",
329
332
  "vue/padding-line-between-blocks": "error",
330
- "vue/no-ref-object-reactivity-loss": "error",
333
+ "vue/no-multiple-objects-in-class": "error",
331
334
  "vue/prefer-separate-static-class": "error",
335
+ "vue/no-ref-object-reactivity-loss": "error",
336
+ "vue/no-duplicate-attr-inheritance": "error",
337
+ "vue/prefer-prop-type-boolean-first": "error",
338
+ "vue/html-comment-indent": ["error", 2],
332
339
  "vue/next-tick-style": ["error", "promise"],
340
+ "vue/v-for-delimiter-style": ["error", "in"],
333
341
  "vue/no-restricted-v-bind": ["error", "/^v-/"],
334
342
  "vue/custom-event-name-casing": ["error", "camelCase"],
343
+ "vue/define-props-declaration": ["error", "type-based"],
335
344
  "vue/define-emits-declaration": ["error", "type-literal"],
336
345
  "vue/prefer-true-attribute-shorthand": ["error", "always"],
337
346
  "vue/component-options-name-casing": ["error", "PascalCase"],
347
+ "vue/component-api-style": ["error", ["script-setup", "composition"]],
348
+ "vue/html-button-has-type": [
349
+ "error",
350
+ {
351
+ button: true,
352
+ submit: true,
353
+ reset: true
354
+ }
355
+ ],
338
356
  "vue/block-order": [
339
357
  "error",
340
358
  {
341
359
  order: ["script", "template", "style"]
342
360
  }
343
361
  ],
362
+ "vue/enforce-style-attribute": [
363
+ "error",
364
+ {
365
+ allow: ["scoped", "plain"]
366
+ }
367
+ ],
368
+ "vue/block-tag-newline": [
369
+ "error",
370
+ {
371
+ singleline: "always",
372
+ multiline: "always"
373
+ }
374
+ ],
375
+ "vue/no-required-prop-with-default": [
376
+ "error",
377
+ {
378
+ autofix: true
379
+ }
380
+ ],
381
+ "vue/html-comment-content-newline": [
382
+ "error",
383
+ {
384
+ singleline: "ignore",
385
+ multiline: "always"
386
+ },
387
+ {
388
+ exceptions: ["*"]
389
+ }
390
+ ],
344
391
  "vue/no-static-inline-styles": [
345
392
  "error",
346
393
  {
@@ -375,6 +422,16 @@ var unCategorizedRules = {
375
422
  {
376
423
  exceptions: ["-"]
377
424
  }
425
+ ],
426
+ "vue/require-macro-variable-name": [
427
+ "error",
428
+ {
429
+ defineProps: "props",
430
+ defineEmits: "emits",
431
+ defineSlots: "slots",
432
+ useSlots: "slots",
433
+ useAttrs: "attrs"
434
+ }
378
435
  ]
379
436
  };
380
437
  var vue = (options = {}) => {
@@ -418,13 +475,6 @@ var vue = (options = {}) => {
418
475
  math: "always"
419
476
  }
420
477
  ],
421
- "vue/block-tag-newline": [
422
- "error",
423
- {
424
- singleline: "always",
425
- multiline: "always"
426
- }
427
- ],
428
478
  "vue/this-in-template": ["error", "never"],
429
479
  "vue/prop-name-casing": ["error", "camelCase"],
430
480
  "vue/attributes-order": [
@@ -1134,6 +1184,16 @@ var imports = (options = {}) => [
1134
1184
  ];
1135
1185
 
1136
1186
  // src/configs/unicorn.ts
1187
+ var disabledRules2 = {
1188
+ "unicorn/better-regex": "off",
1189
+ "unicorn/prefer-top-level-await": "off",
1190
+ "unicorn/explicit-length-check": "off",
1191
+ "unicorn/no-array-callback-reference": "off",
1192
+ /**
1193
+ * @see https://caniuse.com/?search=globalThis
1194
+ */
1195
+ "unicorn/prefer-global-this": "off"
1196
+ };
1137
1197
  var unicorn = (options = {}) => [
1138
1198
  {
1139
1199
  name: "ntnyq/unicorn",
@@ -1141,15 +1201,6 @@ var unicorn = (options = {}) => [
1141
1201
  unicorn: default14
1142
1202
  },
1143
1203
  rules: {
1144
- // Disabled for now
1145
- "unicorn/better-regex": "off",
1146
- "unicorn/prefer-top-level-await": "off",
1147
- "unicorn/explicit-length-check": "off",
1148
- "unicorn/no-array-callback-reference": "off",
1149
- /**
1150
- * @see https://caniuse.com/?search=globalThis
1151
- */
1152
- "unicorn/prefer-global-this": "off",
1153
1204
  "unicorn/error-message": "error",
1154
1205
  "unicorn/escape-case": "error",
1155
1206
  "unicorn/no-new-buffer": "error",
@@ -1160,7 +1211,6 @@ var unicorn = (options = {}) => [
1160
1211
  "unicorn/no-unnecessary-await": "error",
1161
1212
  "unicorn/switch-case-braces": ["error", "avoid"],
1162
1213
  "unicorn/no-typeof-undefined": "error",
1163
- "unicorn/prefer-set-size": "error",
1164
1214
  "unicorn/prefer-regexp-test": "error",
1165
1215
  "unicorn/no-static-only-class": "error",
1166
1216
  "unicorn/no-zero-fractions": "error",
@@ -1180,6 +1230,7 @@ var unicorn = (options = {}) => [
1180
1230
  "unicorn/prefer-prototype-methods": "error",
1181
1231
  "unicorn/prefer-reflect-apply": "error",
1182
1232
  "unicorn/prefer-math-min-max": "error",
1233
+ "unicorn/prefer-structured-clone": "error",
1183
1234
  "unicorn/consistent-existence-index-check": "error",
1184
1235
  "unicorn/catch-error-name": [
1185
1236
  "error",
@@ -1190,6 +1241,7 @@ var unicorn = (options = {}) => [
1190
1241
  ],
1191
1242
  "unicorn/prefer-date-now": "error",
1192
1243
  // String
1244
+ "unicorn/prefer-code-point": "error",
1193
1245
  "unicorn/prefer-string-slice": "error",
1194
1246
  "unicorn/prefer-string-trim-start-end": "error",
1195
1247
  "unicorn/prefer-string-starts-ends-with": "error",
@@ -1211,6 +1263,11 @@ var unicorn = (options = {}) => [
1211
1263
  "unicorn/prefer-array-some": "error",
1212
1264
  "unicorn/prefer-array-flat-map": "error",
1213
1265
  "unicorn/prefer-array-index-of": "error",
1266
+ "unicorn/require-array-join-separator": "error",
1267
+ // Set
1268
+ "unicorn/prefer-set-has": "error",
1269
+ "unicorn/prefer-set-size": "error",
1270
+ ...disabledRules2,
1214
1271
  // Overrides rules
1215
1272
  ...options.overrides
1216
1273
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ntnyq/eslint-config",
3
3
  "type": "module",
4
- "version": "3.2.1",
4
+ "version": "3.2.2",
5
5
  "packageManager": "pnpm@9.12.3",
6
6
  "description": "An opinionated ESLint config preset of ntnyq",
7
7
  "keywords": [
@@ -59,7 +59,7 @@
59
59
  "@eslint/js": "^9.14.0",
60
60
  "@eslint/markdown": "^6.2.1",
61
61
  "@unocss/eslint-plugin": "^0.64.0",
62
- "@vitest/eslint-plugin": "^1.1.8",
62
+ "@vitest/eslint-plugin": "^1.1.10",
63
63
  "eslint-config-flat-gitignore": "^0.3.0",
64
64
  "eslint-flat-config-utils": "^0.4.0",
65
65
  "eslint-merge-processors": "^0.1.0",
@@ -101,11 +101,16 @@
101
101
  "tsup": "^8.3.5",
102
102
  "tsx": "^4.19.2",
103
103
  "typescript": "^5.6.3",
104
- "zx": "^8.2.1"
104
+ "zx": "^8.2.2"
105
105
  },
106
106
  "engines": {
107
107
  "node": ">=18.18.0"
108
108
  },
109
+ "pnpm": {
110
+ "patchedDependencies": {
111
+ "@vitest/eslint-plugin": "patches/@vitest__eslint-plugin.patch"
112
+ }
113
+ },
109
114
  "prettier": "@ntnyq/prettier-config",
110
115
  "nano-staged": {
111
116
  "*.{js,ts,mjs,cjs,json,jsonc,md,yaml,yml}": "eslint --flag unstable_ts_config --fix"