@so1ve/eslint-config 3.12.0 → 3.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ import createCommand from "eslint-plugin-command/config";
1
2
  import pluginComments from "@eslint-community/eslint-plugin-eslint-comments";
2
3
  import pluginSo1ve from "@so1ve/eslint-plugin";
3
4
  import pluginSortImports from "@so1ve/eslint-plugin-sort-imports";
@@ -166,6 +167,13 @@ async function astro({ overrides = {} } = {}) {
166
167
  }];
167
168
  }
168
169
 
170
+ //#endregion
171
+ //#region src/configs/command.ts
172
+ const command = async () => [{
173
+ ...createCommand(),
174
+ name: "so1ve/command/rules"
175
+ }];
176
+
169
177
  //#endregion
170
178
  //#region src/configs/comments.ts
171
179
  const comments = () => [{
@@ -174,11 +182,11 @@ const comments = () => [{
174
182
  }, {
175
183
  name: "so1ve/comments/rules",
176
184
  rules: {
185
+ "eslint-comments/disable-enable-pair": "off",
177
186
  "eslint-comments/no-aggregating-enable": "error",
178
187
  "eslint-comments/no-duplicate-disable": "error",
179
- "eslint-comments/no-unused-enable": "error",
180
- "eslint-comments/disable-enable-pair": "off",
181
- "eslint-comments/no-unlimited-disable": "off"
188
+ "eslint-comments/no-unlimited-disable": "off",
189
+ "eslint-comments/no-unused-enable": "error"
182
190
  }
183
191
  }];
184
192
 
@@ -194,23 +202,23 @@ async function formatting(options) {
194
202
  name: "so1ve/formatting/rules",
195
203
  rules: {
196
204
  "curly": ["error", "all"],
197
- "so1ve/no-useless-template-string": "error",
198
- "so1ve/no-negated-comparison": "error",
205
+ "so1ve/function-style": "error",
199
206
  "so1ve/no-import-promises-as": "error",
207
+ "so1ve/no-negated-comparison": "error",
208
+ "so1ve/no-useless-template-string": "error",
200
209
  "so1ve/pad-after-last-import": "error",
201
- "so1ve/function-style": "error",
202
- "style/quote-props": ["error", "consistent-as-needed"],
210
+ "style/lines-between-class-members": [
211
+ "error",
212
+ "always",
213
+ { exceptAfterSingleLine: true }
214
+ ],
203
215
  "style/no-extra-parens": ["error", "functions"],
204
216
  "style/padding-line-between-statements": ["error", {
205
217
  blankLine: "always",
206
218
  prev: "*",
207
219
  next: "return"
208
220
  }],
209
- "style/lines-between-class-members": [
210
- "error",
211
- "always",
212
- { exceptAfterSingleLine: true }
213
- ],
221
+ "style/quote-props": ["error", "consistent-as-needed"],
214
222
  "style/spaced-comment": [
215
223
  "error",
216
224
  "always",
@@ -387,12 +395,12 @@ async function html() {
387
395
  files: [GLOB_HTML],
388
396
  rules: {
389
397
  ...renameRules(pluginHtml.configs.recommended.rules, { "@html-eslint": "html" }),
398
+ "html/attrs-newline": "off",
390
399
  "html/indent": "off",
391
- "html/no-trailing-spaces": "off",
392
- "html/require-closing-tags": "off",
393
400
  "html/no-extra-spacing-attrs": "off",
401
+ "html/no-trailing-spaces": "off",
394
402
  "html/quotes": "off",
395
- "html/attrs-newline": "off"
403
+ "html/require-closing-tags": "off"
396
404
  }
397
405
  }];
398
406
  }
@@ -453,16 +461,16 @@ const imports = (options = {}) => [
453
461
  } : { node: { extensions: [".js", ".mjs"] } } }
454
462
  },
455
463
  rules: {
456
- "import/named": "error",
457
464
  "import/default": "error",
458
465
  "import/export": "error",
459
466
  "import/first": "error",
467
+ "import/named": "error",
460
468
  "import/namespace": "off",
469
+ "import/no-duplicates": "error",
461
470
  "import/no-mutable-exports": "error",
462
- "import/no-useless-path-segments": ["error", { noUselessIndex: true }],
463
471
  "import/no-named-as-default": "error",
464
- "import/no-duplicates": "error",
465
472
  "import/no-named-default": "error",
473
+ "import/no-useless-path-segments": ["error", { noUselessIndex: true }],
466
474
  "import/no-webpack-loader-syntax": "error"
467
475
  }
468
476
  },
@@ -481,11 +489,11 @@ async function javascript({ overrides } = {}) {
481
489
  {
482
490
  name: "so1ve/javascript/setup",
483
491
  plugins: {
492
+ "array-func": pluginArrayFunc,
493
+ "no-await-in-promise": pluginNoAwaitInPromise,
484
494
  "so1ve": await interopDefault(pluginSo1ve),
485
- "unused-imports": pluginUnusedImports,
486
495
  "sort-imports": pluginSortImports,
487
- "array-func": pluginArrayFunc,
488
- "no-await-in-promise": pluginNoAwaitInPromise
496
+ "unused-imports": pluginUnusedImports
489
497
  }
490
498
  },
491
499
  {
@@ -509,85 +517,85 @@ async function javascript({ overrides } = {}) {
509
517
  },
510
518
  linterOptions: { reportUnusedDisableDirectives: true },
511
519
  rules: {
520
+ "accessor-pairs": ["error", {
521
+ setWithoutGet: true,
522
+ enforceForClassMembers: true
523
+ }],
512
524
  "array-bracket-newline": "off",
525
+ "array-callback-return": "error",
513
526
  "array-element-newline": "off",
527
+ "array-func/avoid-reverse": "error",
528
+ "array-func/from-map": "off",
529
+ "array-func/no-unnecessary-this-arg": "off",
530
+ "array-func/prefer-array-from": "off",
531
+ "array-func/prefer-flat-map": "error",
532
+ "array-func/prefer-flat": "off",
514
533
  "arrow-body-style": "off",
515
534
  "arrow-parens": "off",
535
+ "block-scoped-var": "error",
536
+ "complexity": ["off", 11],
537
+ "consistent-return": "off",
538
+ "constructor-super": "error",
539
+ "default-case-last": "error",
516
540
  "dot-notation": ["error", { allowKeywords: true }],
541
+ "eqeqeq": ["error", "smart"],
517
542
  "function-call-argument-newline": "off",
518
543
  "function-paren-newline": "off",
519
544
  "generator-star": "off",
520
545
  "implicit-arrow-linebreak": "off",
521
- "indent": "off",
522
546
  "indent-legacy": "off",
547
+ "indent": "off",
523
548
  "jsx-quotes": "off",
524
549
  "linebreak-style": "off",
525
- "newline-per-chained-call": "off",
526
- "no-arrow-condition": "off",
527
- "no-comma-dangle": "off",
528
- "no-confusing-arrow": "off",
529
- "no-extra-semi": "off",
530
- "no-reserved-keys": "off",
531
- "no-spaced-func": "off",
532
- "no-space-before-semi": "off",
533
- "no-wrap-func": "off",
534
- "nonblock-statement-body-position": "off",
535
- "one-var-declaration-per-line": "off",
536
- "switch-colon-spacing": "off",
537
- "symbol-description": "off",
538
- "wrap-regex": "off",
539
- "unused-imports/no-unused-imports": "error",
540
- "unused-imports/no-unused-vars": ["error", {
541
- vars: "all",
542
- varsIgnorePattern: "^_",
543
- args: "after-used",
544
- argsIgnorePattern: "^_",
545
- ignoreRestSiblings: true
546
- }],
547
- "accessor-pairs": ["error", {
548
- setWithoutGet: true,
549
- enforceForClassMembers: true
550
- }],
551
- "constructor-super": "error",
552
- "default-case-last": "error",
553
550
  "new-cap": ["error", {
554
551
  newIsCap: true,
555
552
  capIsNew: false,
556
553
  properties: true
557
554
  }],
555
+ "newline-per-chained-call": "off",
556
+ "no-alert": "error",
558
557
  "no-array-constructor": "error",
558
+ "no-arrow-condition": "off",
559
559
  "no-async-promise-executor": "error",
560
+ "no-await-in-promise/no-await-in-promise": "error",
560
561
  "no-caller": "error",
562
+ "no-case-declarations": "error",
561
563
  "no-class-assign": "error",
564
+ "no-comma-dangle": "off",
562
565
  "no-compare-neg-zero": "error",
566
+ "no-cond-assign": ["error", "always"],
567
+ "no-confusing-arrow": "off",
568
+ "no-console": ["error", { allow: [
569
+ "error",
570
+ "warn",
571
+ "table",
572
+ "time"
573
+ ] }],
563
574
  "no-const-assign": "error",
575
+ "no-constant-condition": "error",
564
576
  "no-control-regex": "error",
577
+ "no-debugger": "error",
565
578
  "no-delete-var": "error",
566
579
  "no-dupe-args": "error",
567
580
  "no-dupe-class-members": "error",
568
581
  "no-dupe-keys": "error",
569
582
  "no-duplicate-case": "error",
570
- "no-useless-backreference": "error",
571
- "no-useless-call": "error",
572
- "no-useless-computed-key": "error",
573
- "no-useless-constructor": "error",
574
- "no-useless-rename": "error",
575
- "no-useless-return": "error",
576
- "no-void": "error",
577
- "no-empty": ["error", { allowEmptyCatch: true }],
578
583
  "no-empty-character-class": "error",
579
584
  "no-empty-pattern": "error",
585
+ "no-empty": ["error", { allowEmptyCatch: true }],
580
586
  "no-eval": "error",
581
587
  "no-ex-assign": "error",
582
588
  "no-extend-native": "error",
583
589
  "no-extra-bind": "error",
584
590
  "no-extra-boolean-cast": "error",
591
+ "no-extra-semi": "off",
585
592
  "no-fallthrough": "error",
586
593
  "no-func-assign": "error",
587
594
  "no-global-assign": "error",
588
595
  "no-implied-eval": "error",
589
596
  "no-import-assign": "error",
590
597
  "no-invalid-regexp": "error",
598
+ "no-invalid-this": "error",
591
599
  "no-irregular-whitespace": "error",
592
600
  "no-iterator": "error",
593
601
  "no-labels": ["error", {
@@ -597,28 +605,20 @@ async function javascript({ overrides } = {}) {
597
605
  "no-lone-blocks": "error",
598
606
  "no-loss-of-precision": "error",
599
607
  "no-misleading-character-class": "error",
608
+ "no-multi-str": "error",
600
609
  "no-new-func": "error",
601
- "no-object-constructor": "error",
602
610
  "no-new-native-nonconstructor": "error",
603
611
  "no-new-wrappers": "error",
604
- "no-prototype-builtins": "error",
605
- "no-useless-catch": "error",
612
+ "no-obj-calls": "error",
613
+ "no-object-constructor": "error",
614
+ "no-octal-escape": "error",
615
+ "no-octal": "error",
606
616
  "no-param-reassign": "off",
607
- "no-constant-condition": "error",
608
- "no-debugger": "error",
609
- "no-console": ["error", { allow: [
610
- "error",
611
- "warn",
612
- "table",
613
- "time"
614
- ] }],
615
- "no-cond-assign": ["error", "always"],
616
- "no-restricted-syntax": [
617
- "error",
618
- "DebuggerStatement",
619
- "LabeledStatement",
620
- "WithStatement"
621
- ],
617
+ "no-proto": "error",
618
+ "no-prototype-builtins": "error",
619
+ "no-redeclare": ["error", { builtinGlobals: false }],
620
+ "no-regex-spaces": "error",
621
+ "no-reserved-keys": "off",
622
622
  "no-restricted-globals": [
623
623
  "error",
624
624
  {
@@ -689,53 +689,31 @@ async function javascript({ overrides } = {}) {
689
689
  message: "Use `Number.parseInt` instead"
690
690
  }
691
691
  ],
692
- "no-obj-calls": "error",
693
- "no-octal": "error",
694
- "no-octal-escape": "error",
695
- "no-proto": "error",
696
- "no-redeclare": ["error", { builtinGlobals: false }],
697
- "no-regex-spaces": "error",
692
+ "no-restricted-syntax": [
693
+ "error",
694
+ "DebuggerStatement",
695
+ "LabeledStatement",
696
+ "WithStatement"
697
+ ],
698
+ "no-return-await": "off",
698
699
  "no-self-assign": ["error", { props: true }],
699
700
  "no-self-compare": "error",
700
701
  "no-sequences": "error",
701
702
  "no-shadow-restricted-names": "error",
703
+ "no-space-before-semi": "off",
704
+ "no-spaced-func": "off",
702
705
  "no-template-curly-in-string": "error",
703
706
  "no-this-before-super": "error",
704
707
  "no-throw-literal": "error",
705
- "no-undef": "error",
706
708
  "no-undef-init": "error",
709
+ "no-undef": "error",
707
710
  "no-unexpected-multiline": "error",
708
711
  "no-unmodified-loop-condition": "error",
709
712
  "no-unneeded-ternary": ["error", { defaultAssignment: false }],
710
- "no-unreachable": "error",
711
713
  "no-unreachable-loop": "error",
714
+ "no-unreachable": "error",
712
715
  "no-unsafe-finally": "error",
713
716
  "no-unsafe-negation": "error",
714
- "no-return-await": "off",
715
- "no-var": "error",
716
- "prefer-const": ["error", {
717
- destructuring: "all",
718
- ignoreReadBeforeAssign: true
719
- }],
720
- "prefer-arrow-callback": ["error", {
721
- allowNamedFunctions: false,
722
- allowUnboundThis: true
723
- }],
724
- "one-var": ["error", "never"],
725
- "object-shorthand": [
726
- "error",
727
- "always",
728
- { ignoreConstructors: false }
729
- ],
730
- "prefer-exponentiation-operator": "error",
731
- "prefer-rest-params": "error",
732
- "prefer-spread": "error",
733
- "prefer-template": "error",
734
- "prefer-promise-reject-errors": "error",
735
- "prefer-regex-literals": ["error", { disallowRedundantWrapping: true }],
736
- "yoda": ["error", "never"],
737
- "array-callback-return": "error",
738
- "block-scoped-var": "error",
739
717
  "no-unused-expressions": ["error", {
740
718
  allowShortCircuit: true,
741
719
  allowTernary: true,
@@ -752,32 +730,62 @@ async function javascript({ overrides } = {}) {
752
730
  classes: false,
753
731
  variables: true
754
732
  }],
755
- "consistent-return": "off",
756
- "complexity": ["off", 11],
757
- "eqeqeq": ["error", "smart"],
758
- "no-alert": "error",
759
- "no-case-declarations": "error",
760
- "no-multi-str": "error",
733
+ "no-useless-backreference": "error",
734
+ "no-useless-call": "error",
735
+ "no-useless-catch": "error",
736
+ "no-useless-computed-key": "error",
737
+ "no-useless-constructor": "error",
738
+ "no-useless-rename": "error",
739
+ "no-useless-return": "error",
740
+ "no-var": "error",
741
+ "no-void": "error",
761
742
  "no-with": "error",
762
- "no-invalid-this": "error",
763
- "vars-on-top": "error",
743
+ "no-wrap-func": "off",
744
+ "nonblock-statement-body-position": "off",
745
+ "object-shorthand": [
746
+ "error",
747
+ "always",
748
+ { ignoreConstructors: false }
749
+ ],
750
+ "one-var-declaration-per-line": "off",
751
+ "one-var": ["error", "never"],
752
+ "prefer-arrow-callback": ["error", {
753
+ allowNamedFunctions: false,
754
+ allowUnboundThis: true
755
+ }],
756
+ "prefer-const": ["error", {
757
+ destructuring: "all",
758
+ ignoreReadBeforeAssign: true
759
+ }],
760
+ "prefer-exponentiation-operator": "error",
761
+ "prefer-promise-reject-errors": "error",
762
+ "prefer-regex-literals": ["error", { disallowRedundantWrapping: true }],
763
+ "prefer-rest-params": "error",
764
+ "prefer-spread": "error",
765
+ "prefer-template": "error",
764
766
  "require-await": "off",
767
+ "so1ve/import-dedupe": "error",
768
+ "so1ve/require-async-with-await": "error",
769
+ "sort-imports/exports": "error",
770
+ "sort-imports/imports": ["error"],
771
+ "switch-colon-spacing": "off",
772
+ "symbol-description": "off",
773
+ "unused-imports/no-unused-imports": "error",
774
+ "unused-imports/no-unused-vars": ["error", {
775
+ vars: "all",
776
+ varsIgnorePattern: "^_",
777
+ args: "after-used",
778
+ argsIgnorePattern: "^_",
779
+ ignoreRestSiblings: true
780
+ }],
765
781
  "use-isnan": ["error", {
766
782
  enforceForSwitchCase: true,
767
783
  enforceForIndexOf: true
768
784
  }],
769
785
  "valid-typeof": ["error", { requireStringLiterals: true }],
770
- "so1ve/import-dedupe": "error",
771
- "so1ve/require-async-with-await": "error",
772
- "sort-imports/imports": ["error"],
773
- "sort-imports/exports": "error",
774
- "array-func/prefer-array-from": "off",
775
- "array-func/no-unnecessary-this-arg": "off",
776
- "array-func/prefer-flat": "off",
777
- "array-func/from-map": "off",
778
- "array-func/avoid-reverse": "error",
779
- "array-func/prefer-flat-map": "error",
780
- "no-await-in-promise/no-await-in-promise": "error",
786
+ "vars-on-top": "error",
787
+ "wrap-regex": "off",
788
+ "yoda": ["error", "never"],
781
789
  ...overrides
782
790
  }
783
791
  },
@@ -817,8 +825,8 @@ async function jsonc() {
817
825
  ...pluginJsonc.configs.base.overrides[0].rules,
818
826
  ...pluginJsonc.configs["recommended-with-jsonc"].rules,
819
827
  "jsonc/no-octal-escape": "error",
820
- "jsonc/quotes": "off",
821
- "jsonc/quotes-props": "off"
828
+ "jsonc/quotes-props": "off",
829
+ "jsonc/quotes": "off"
822
830
  }
823
831
  }];
824
832
  }
@@ -841,21 +849,21 @@ async function mdx({ componentExts = [], overrides } = {}) {
841
849
  rules: {
842
850
  ...pluginMdx.flatCodeBlocks.rules,
843
851
  "html/require-doctype": "off",
844
- "ts/no-redeclare": "off",
845
- "ts/no-unused-vars": "off",
846
- "ts/no-use-before-define": "off",
847
- "ts/no-var-requires": "off",
848
- "ts/consistent-type-imports": "off",
849
- "ts/no-namespace": "off",
850
- "ts/no-require-imports": "off",
851
852
  "import/no-unresolved": "off",
852
- "unused-imports/no-unused-imports": "off",
853
- "unused-imports/no-unused-vars": "off",
854
853
  "no-alert": "off",
855
854
  "no-console": "off",
856
855
  "no-restricted-imports": "off",
857
856
  "no-undef": "off",
858
857
  "no-unused-expressions": "off",
858
+ "ts/consistent-type-imports": "off",
859
+ "ts/no-namespace": "off",
860
+ "ts/no-redeclare": "off",
861
+ "ts/no-require-imports": "off",
862
+ "ts/no-unused-vars": "off",
863
+ "ts/no-use-before-define": "off",
864
+ "ts/no-var-requires": "off",
865
+ "unused-imports/no-unused-imports": "off",
866
+ "unused-imports/no-unused-vars": "off",
859
867
  ...overrides
860
868
  }
861
869
  }];
@@ -869,8 +877,8 @@ const node = () => [{
869
877
  }, {
870
878
  name: "so1ve/node/rules",
871
879
  rules: {
872
- "node/no-callback-literal": "off",
873
880
  "node/handle-callback-err": ["error", "^(err|error)$"],
881
+ "node/no-callback-literal": "off",
874
882
  "node/no-deprecated-api": "error",
875
883
  "node/no-exports-assign": "error",
876
884
  "node/no-new-require": "error",
@@ -999,9 +1007,9 @@ async function test({ overrides } = {}) {
999
1007
  return [{
1000
1008
  name: "so1ve/test/setup",
1001
1009
  plugins: {
1010
+ "jest-formatting": pluginJestFormatting,
1002
1011
  "no-only-tests": pluginNoOnlyTests,
1003
- "vitest": pluginVitest,
1004
- "jest-formatting": pluginJestFormatting
1012
+ "vitest": pluginVitest
1005
1013
  }
1006
1014
  }, {
1007
1015
  name: "so1ve/test/rules",
@@ -1010,13 +1018,11 @@ async function test({ overrides } = {}) {
1010
1018
  ...pluginVitest.configs.recommended.rules,
1011
1019
  "no-only-tests/no-only-tests": "error",
1012
1020
  "vitest/expect-expect": "off",
1013
- "vitest/valid-title": "off",
1014
- "vitest/valid-describe-callback": "off",
1015
1021
  "vitest/no-alias-methods": "error",
1016
1022
  "vitest/no-interpolation-in-snapshots": "error",
1017
1023
  "vitest/no-test-prefixes": "error",
1018
- "vitest/prefer-expect-resolves": "error",
1019
1024
  "vitest/prefer-comparison-matcher": "error",
1025
+ "vitest/prefer-expect-resolves": "error",
1020
1026
  "vitest/prefer-mock-promise-shorthand": "error",
1021
1027
  "vitest/prefer-spy-on": "error",
1022
1028
  "vitest/prefer-to-be-falsy": "error",
@@ -1025,6 +1031,8 @@ async function test({ overrides } = {}) {
1025
1031
  "vitest/prefer-to-contain": "error",
1026
1032
  "vitest/prefer-to-have-length": "error",
1027
1033
  "vitest/prefer-todo": "error",
1034
+ "vitest/valid-describe-callback": "off",
1035
+ "vitest/valid-title": "off",
1028
1036
  ...overrides
1029
1037
  }
1030
1038
  }];
@@ -1100,20 +1108,52 @@ const typescript = async ({ componentExts = [], parserOptions, overrides } = {})
1100
1108
  ...b
1101
1109
  }), {}), { "@typescript-eslint": "ts" }),
1102
1110
  "import/named": "off",
1111
+ "no-dupe-class-members": "off",
1112
+ "no-invalid-this": "off",
1113
+ "no-redeclare": "off",
1114
+ "no-use-before-define": "off",
1115
+ "no-useless-constructor": "off",
1116
+ "object-curly-spacing": "off",
1117
+ "so1ve/no-inline-type-import": "error",
1103
1118
  "so1ve/prefer-ts-expect-error": "error",
1104
- "ts/comma-dangle": "off",
1119
+ "space-before-blocks": "off",
1120
+ "space-before-function-paren": "off",
1121
+ "ts/ban-ts-comment": ["error", { minimumDescriptionLength: 0 }],
1122
+ "ts/ban-ts-ignore": "off",
1105
1123
  "ts/brace-style": "off",
1124
+ "ts/camelcase": "off",
1125
+ "ts/comma-dangle": "off",
1106
1126
  "ts/comma-spacing": "off",
1127
+ "ts/consistent-indexed-object-style": ["error", "record"],
1128
+ "ts/consistent-type-definitions": ["error", "interface"],
1129
+ "ts/consistent-type-imports": ["error", {
1130
+ prefer: "type-imports",
1131
+ disallowTypeAnnotations: false
1132
+ }],
1133
+ "ts/explicit-function-return-type": "off",
1134
+ "ts/explicit-member-accessibility": ["error", {
1135
+ accessibility: "explicit",
1136
+ overrides: { constructors: "no-public" }
1137
+ }],
1138
+ "ts/explicit-module-boundary-types": "off",
1107
1139
  "ts/func-call-spacing": "off",
1108
1140
  "ts/indent": "off",
1109
1141
  "ts/keyword-spacing": "off",
1110
1142
  "ts/member-delimiter-style": "off",
1143
+ "ts/method-signature-style": ["error", "property"],
1144
+ "ts/no-dupe-class-members": "error",
1145
+ "ts/no-duplicate-enum-values": "error",
1146
+ "ts/no-empty-function": "off",
1147
+ "ts/no-empty-interface": "off",
1148
+ "ts/no-empty-object-type": ["error", { allowInterfaces: "always" }],
1149
+ "ts/no-explicit-any": "off",
1111
1150
  "ts/no-extra-semi": "off",
1112
- "ts/quotes": "off",
1113
- "ts/semi": "off",
1114
- "ts/space-before-function-paren": "off",
1115
- "ts/type-annotation-spacing": "off",
1116
- "ts/ban-ts-comment": ["error", { minimumDescriptionLength: 0 }],
1151
+ "ts/no-invalid-this": "error",
1152
+ "ts/no-non-null-asserted-nullish-coalescing": "error",
1153
+ "ts/no-non-null-assertion": "off",
1154
+ "ts/no-parameter-properties": "off",
1155
+ "ts/no-redeclare": "error",
1156
+ "ts/no-require-imports": "error",
1117
1157
  "ts/no-restricted-types": ["error", { types: {
1118
1158
  String: {
1119
1159
  message: "Use `string` instead.",
@@ -1149,51 +1189,20 @@ const typescript = async ({ componentExts = [], parserOptions, overrides } = {})
1149
1189
  }
1150
1190
  } }],
1151
1191
  "ts/no-unsafe-function-type": "error",
1152
- "ts/no-wrapper-object-types": "error",
1153
- "ts/consistent-type-imports": ["error", {
1154
- prefer: "type-imports",
1155
- disallowTypeAnnotations: false
1156
- }],
1157
- "ts/consistent-type-definitions": ["error", "interface"],
1158
- "ts/consistent-indexed-object-style": ["error", "record"],
1159
- "ts/prefer-for-of": "error",
1160
- "ts/no-duplicate-enum-values": "error",
1161
- "ts/no-non-null-asserted-nullish-coalescing": "error",
1162
- "ts/no-require-imports": "error",
1163
- "ts/method-signature-style": ["error", "property"],
1164
- "ts/explicit-member-accessibility": ["error", {
1165
- accessibility: "explicit",
1166
- overrides: { constructors: "no-public" }
1167
- }],
1168
- "no-useless-constructor": "off",
1169
- "no-invalid-this": "off",
1170
- "ts/no-invalid-this": "error",
1171
- "no-redeclare": "off",
1172
- "ts/no-redeclare": "error",
1173
- "no-use-before-define": "off",
1192
+ "ts/no-unused-vars": "off",
1174
1193
  "ts/no-use-before-define": ["error", {
1175
1194
  functions: false,
1176
1195
  classes: false,
1177
1196
  variables: true
1178
1197
  }],
1179
- "object-curly-spacing": "off",
1180
- "space-before-blocks": "off",
1198
+ "ts/no-wrapper-object-types": "error",
1199
+ "ts/prefer-for-of": "error",
1200
+ "ts/quotes": "off",
1201
+ "ts/semi": "off",
1181
1202
  "ts/space-before-blocks": "off",
1182
- "space-before-function-paren": "off",
1183
- "no-dupe-class-members": "off",
1184
- "ts/no-dupe-class-members": "error",
1185
- "so1ve/no-inline-type-import": "error",
1186
- "ts/camelcase": "off",
1187
- "ts/explicit-function-return-type": "off",
1188
- "ts/no-explicit-any": "off",
1189
- "ts/no-parameter-properties": "off",
1190
- "ts/no-empty-interface": "off",
1191
- "ts/ban-ts-ignore": "off",
1192
- "ts/no-empty-function": "off",
1193
- "ts/no-non-null-assertion": "off",
1194
- "ts/explicit-module-boundary-types": "off",
1203
+ "ts/space-before-function-paren": "off",
1195
1204
  "ts/triple-slash-reference": "off",
1196
- "ts/no-unused-vars": "off",
1205
+ "ts/type-annotation-spacing": "off",
1197
1206
  ...overrides
1198
1207
  }
1199
1208
  },
@@ -1232,36 +1241,36 @@ const typescript = async ({ componentExts = [], parserOptions, overrides } = {})
1232
1241
  ] }
1233
1242
  } },
1234
1243
  rules: {
1235
- "no-throw-literal": "off",
1236
- "ts/only-throw-error": "error",
1237
- "no-implied-eval": "off",
1238
- "ts/no-implied-eval": "error",
1239
1244
  "dot-notation": "off",
1240
- "ts/dot-notation": ["error", { allowKeywords: true }],
1245
+ "no-implied-eval": "off",
1246
+ "no-throw-literal": "off",
1241
1247
  "no-void": ["error", { allowAsStatement: true }],
1242
- "ts/await-thenable": "error",
1243
- "ts/no-for-in-array": "error",
1244
- "ts/no-unnecessary-type-assertion": "error",
1245
- "ts/restrict-template-expressions": ["error", {
1246
- allowAny: true,
1247
- allowNumber: true,
1248
- allowBoolean: true
1249
- }],
1250
1248
  "ts/array-type": ["error", {
1251
1249
  default: "array",
1252
1250
  readonly: "array"
1253
1251
  }],
1252
+ "ts/await-thenable": "error",
1254
1253
  "ts/consistent-generic-constructors": "error",
1255
- "ts/consistent-type-exports": "error",
1256
1254
  "ts/consistent-type-assertions": ["error", {
1257
1255
  assertionStyle: "as",
1258
1256
  objectLiteralTypeAssertions: "allow"
1259
1257
  }],
1258
+ "ts/consistent-type-exports": "error",
1259
+ "ts/dot-notation": ["error", { allowKeywords: true }],
1260
+ "ts/no-for-in-array": "error",
1261
+ "ts/no-implied-eval": "error",
1262
+ "ts/no-unnecessary-type-arguments": "error",
1263
+ "ts/no-unnecessary-type-assertion": "error",
1264
+ "ts/non-nullable-type-assertion-style": "error",
1265
+ "ts/only-throw-error": "error",
1260
1266
  "ts/prefer-nullish-coalescing": "error",
1261
1267
  "ts/prefer-optional-chain": "error",
1262
1268
  "ts/prefer-return-this-type": "error",
1263
- "ts/no-unnecessary-type-arguments": "error",
1264
- "ts/non-nullable-type-assertion-style": "error"
1269
+ "ts/restrict-template-expressions": ["error", {
1270
+ allowAny: true,
1271
+ allowNumber: true,
1272
+ allowBoolean: true
1273
+ }]
1265
1274
  }
1266
1275
  },
1267
1276
  {
@@ -1292,51 +1301,57 @@ const unicorn = () => [{
1292
1301
  name: "so1ve/unicorn/rules",
1293
1302
  rules: {
1294
1303
  "unicorn/consistent-assert": "error",
1304
+ "unicorn/consistent-date-clone": "error",
1295
1305
  "unicorn/consistent-empty-array-spread": "error",
1296
1306
  "unicorn/consistent-existence-index-check": "error",
1297
- "unicorn/consistent-date-clone": "error",
1298
- "unicorn/throw-new-error": "error",
1299
- "unicorn/relative-url-style": ["error", "always"],
1300
- "unicorn/switch-case-braces": "error",
1301
- "unicorn/number-literal-case": "error",
1302
- "unicorn/numeric-separators-style": "error",
1303
- "unicorn/new-for-builtins": "error",
1304
1307
  "unicorn/error-message": "error",
1305
1308
  "unicorn/escape-case": "error",
1306
1309
  "unicorn/explicit-length-check": "error",
1307
- "unicorn/no-instanceof-builtins": "error",
1308
- "unicorn/no-new-buffer": "error",
1309
- "unicorn/no-new-array": "error",
1310
+ "unicorn/new-for-builtins": "error",
1310
1311
  "unicorn/no-array-for-each": "error",
1311
1312
  "unicorn/no-array-method-this-argument": "error",
1313
+ "unicorn/no-await-expression-member": "error",
1314
+ "unicorn/no-await-in-promise-methods": "error",
1312
1315
  "unicorn/no-for-loop": "error",
1316
+ "unicorn/no-immediate-mutation": "error",
1317
+ "unicorn/no-instanceof-builtins": "error",
1313
1318
  "unicorn/no-lonely-if": "error",
1314
1319
  "unicorn/no-negated-condition": "error",
1320
+ "unicorn/no-new-array": "error",
1321
+ "unicorn/no-new-buffer": "error",
1322
+ "unicorn/no-useless-collection-argument": "error",
1315
1323
  "unicorn/no-useless-spread": "error",
1316
- "unicorn/require-module-specifiers": "error",
1317
- "unicorn/prefer-ternary": "error",
1318
- "unicorn/prefer-query-selector": "error",
1324
+ "unicorn/no-zero-fractions": "error",
1325
+ "unicorn/number-literal-case": "error",
1326
+ "unicorn/numeric-separators-style": "error",
1327
+ "unicorn/prefer-array-find": "error",
1328
+ "unicorn/prefer-array-flat": "error",
1329
+ "unicorn/prefer-array-index-of": "error",
1330
+ "unicorn/prefer-array-some": "error",
1331
+ "unicorn/prefer-class-fields": "error",
1332
+ "unicorn/prefer-date-now": "error",
1333
+ "unicorn/prefer-includes": "error",
1334
+ "unicorn/prefer-json-parse-buffer": "error",
1319
1335
  "unicorn/prefer-modern-dom-apis": "error",
1320
1336
  "unicorn/prefer-modern-math-apis": "error",
1321
- "unicorn/prefer-json-parse-buffer": "error",
1322
- "unicorn/prefer-date-now": "error",
1323
- "unicorn/prefer-array-some": "error",
1324
- "unicorn/prefer-array-index-of": "error",
1325
- "unicorn/prefer-array-flat": "error",
1326
- "unicorn/prefer-array-find": "error",
1327
- "unicorn/prefer-spread": "error",
1337
+ "unicorn/prefer-negative-index": "error",
1338
+ "unicorn/prefer-node-protocol": "error",
1339
+ "unicorn/prefer-object-from-entries": "error",
1340
+ "unicorn/prefer-optional-catch-binding": "error",
1341
+ "unicorn/prefer-prototype-methods": "error",
1342
+ "unicorn/prefer-query-selector": "error",
1343
+ "unicorn/prefer-regexp-test": "error",
1344
+ "unicorn/prefer-response-static-json": "error",
1328
1345
  "unicorn/prefer-set-size": "error",
1346
+ "unicorn/prefer-spread": "error",
1329
1347
  "unicorn/prefer-string-slice": "error",
1330
- "unicorn/prefer-includes": "error",
1331
1348
  "unicorn/prefer-string-starts-ends-with": "error",
1349
+ "unicorn/prefer-ternary": "error",
1332
1350
  "unicorn/prefer-type-error": "error",
1333
- "unicorn/prefer-node-protocol": "error",
1334
- "unicorn/prefer-negative-index": "error",
1335
- "unicorn/prefer-regexp-test": "error",
1336
- "unicorn/prefer-optional-catch-binding": "error",
1337
- "unicorn/prefer-object-from-entries": "error",
1338
- "unicorn/prefer-prototype-methods": "error",
1339
- "unicorn/prefer-class-fields": "error"
1351
+ "unicorn/relative-url-style": ["error", "always"],
1352
+ "unicorn/require-module-specifiers": "error",
1353
+ "unicorn/switch-case-braces": "error",
1354
+ "unicorn/throw-new-error": "error"
1340
1355
  }
1341
1356
  }];
1342
1357
 
@@ -1365,19 +1380,56 @@ async function vue({ overrides, typescript: typescript$1 } = {}) {
1365
1380
  ...pluginVue.configs.essential.rules,
1366
1381
  ...pluginVue.configs["strongly-recommended"].rules,
1367
1382
  ...pluginVue.configs.recommended.rules,
1368
- "no-unused-vars": "off",
1369
1383
  "no-undef": "off",
1384
+ "no-unused-vars": "off",
1385
+ "so1ve/vue-root-element-sort-attributes": "error",
1370
1386
  "ts/no-unused-vars": "off",
1371
- "vue/no-v-html": "off",
1372
- "vue/require-prop-types": "off",
1373
- "vue/require-default-prop": "off",
1374
- "vue/multi-word-component-names": "off",
1387
+ "vue/array-bracket-spacing": "off",
1388
+ "vue/arrow-spacing": "off",
1389
+ "vue/attributes-order": ["error", {
1390
+ order: [
1391
+ "DEFINITION",
1392
+ "LIST_RENDERING",
1393
+ "CONDITIONALS",
1394
+ "RENDER_MODIFIERS",
1395
+ "TWO_WAY_BINDING",
1396
+ "OTHER_DIRECTIVES",
1397
+ ["UNIQUE", "SLOT"],
1398
+ "GLOBAL",
1399
+ "OTHER_ATTR",
1400
+ "EVENTS",
1401
+ "CONTENT"
1402
+ ],
1403
+ alphabetical: true
1404
+ }],
1405
+ "vue/block-lang": ["error", {
1406
+ script: { lang: ["js", "ts"] },
1407
+ template: { lang: [
1408
+ "html",
1409
+ "jade",
1410
+ "pug",
1411
+ "ejs"
1412
+ ] },
1413
+ style: { lang: [
1414
+ "css",
1415
+ "sass",
1416
+ "scss",
1417
+ "less",
1418
+ "stylus",
1419
+ "postcss"
1420
+ ] }
1421
+ }],
1375
1422
  "vue/block-order": ["error", { order: [
1376
1423
  "script:not([setup])",
1377
1424
  "script[setup]",
1378
1425
  "template",
1379
1426
  "style"
1380
1427
  ] }],
1428
+ "vue/block-spacing": "off",
1429
+ "vue/brace-style": "off",
1430
+ "vue/comma-dangle": "off",
1431
+ "vue/comma-spacing": "off",
1432
+ "vue/comma-style": "off",
1381
1433
  "vue/component-api-style": ["error", ["script-setup", "composition"]],
1382
1434
  "vue/component-name-in-template-casing": [
1383
1435
  "error",
@@ -1392,31 +1444,63 @@ async function vue({ overrides, typescript: typescript$1 } = {}) {
1392
1444
  "defineProps",
1393
1445
  "defineSlots"
1394
1446
  ] }],
1447
+ "vue/dot-location": ["error", "property"],
1448
+ "vue/dot-notation": ["error", { allowKeywords: true }],
1449
+ "vue/eqeqeq": ["error", "smart"],
1450
+ "vue/html-closing-bracket-spacing": "off",
1451
+ "vue/html-comment-content-newline": ["error", {
1452
+ singleline: "ignore",
1453
+ multiline: "always"
1454
+ }],
1395
1455
  "vue/html-comment-content-spacing": [
1396
1456
  "error",
1397
1457
  "always",
1398
1458
  { exceptions: ["-"] }
1399
1459
  ],
1400
- "vue/no-restricted-v-bind": ["error", "/^v-/"],
1401
- "vue/no-useless-v-bind": ["error", { ignoreIncludesComment: true }],
1402
- "vue/no-unused-refs": "error",
1403
- "vue/no-v-text-v-html-on-component": "error",
1404
- "vue/padding-line-between-blocks": ["error", "always"],
1405
- "vue/prefer-separate-static-class": "error",
1406
- "vue/dot-location": ["error", "property"],
1407
- "vue/dot-notation": ["error", { allowKeywords: true }],
1408
- "vue/eqeqeq": ["error", "smart"],
1460
+ "vue/html-comment-indent": ["error", "tab"],
1461
+ "vue/html-indent": "off",
1462
+ "vue/html-quotes": "off",
1463
+ "vue/html-self-closing": ["error", {
1464
+ html: {
1465
+ void: "always",
1466
+ normal: "always",
1467
+ component: "always"
1468
+ },
1469
+ svg: "always",
1470
+ math: "always"
1471
+ }],
1472
+ "vue/key-spacing": "off",
1473
+ "vue/keyword-spacing": "off",
1474
+ "vue/max-attributes-per-line": "off",
1475
+ "vue/multi-word-component-names": "off",
1476
+ "vue/multiline-html-element-content-newline": "off",
1477
+ "vue/mustache-interpolation-spacing": "off",
1478
+ "vue/no-console": ["error", { allow: [
1479
+ "error",
1480
+ "warn",
1481
+ "table",
1482
+ "time"
1483
+ ] }],
1409
1484
  "vue/no-constant-condition": "error",
1410
1485
  "vue/no-empty-pattern": "error",
1411
1486
  "vue/no-irregular-whitespace": "error",
1412
1487
  "vue/no-loss-of-precision": "error",
1488
+ "vue/no-multi-spaces": "off",
1489
+ "vue/no-multiple-template-root": "off",
1413
1490
  "vue/no-restricted-syntax": [
1414
1491
  "error",
1415
1492
  "DebuggerStatement",
1416
1493
  "LabeledStatement",
1417
1494
  "WithStatement"
1418
1495
  ],
1496
+ "vue/no-restricted-v-bind": ["error", "/^v-/"],
1419
1497
  "vue/no-sparse-arrays": "error",
1498
+ "vue/no-static-inline-styles": ["error", { allowBinding: true }],
1499
+ "vue/no-unused-refs": "error",
1500
+ "vue/no-useless-concat": "error",
1501
+ "vue/no-useless-v-bind": ["error", { ignoreIncludesComment: true }],
1502
+ "vue/no-v-html": "off",
1503
+ "vue/no-v-text-v-html-on-component": "error",
1420
1504
  "vue/object-curly-newline": ["error", {
1421
1505
  multiline: true,
1422
1506
  consistent: true
@@ -1430,25 +1514,14 @@ async function vue({ overrides, typescript: typescript$1 } = {}) {
1430
1514
  avoidQuotes: true
1431
1515
  }
1432
1516
  ],
1517
+ "vue/operator-linebreak": "off",
1518
+ "vue/padding-line-between-blocks": ["error", "always"],
1519
+ "vue/prefer-define-options": "error",
1520
+ "vue/prefer-separate-static-class": "error",
1433
1521
  "vue/prefer-template": "error",
1522
+ "vue/prefer-true-attribute-shorthand": "error",
1434
1523
  "vue/quote-props": ["error", "consistent-as-needed"],
1435
- "vue/block-lang": ["error", {
1436
- script: { lang: ["js", "ts"] },
1437
- template: { lang: [
1438
- "html",
1439
- "jade",
1440
- "pug",
1441
- "ejs"
1442
- ] },
1443
- style: { lang: [
1444
- "css",
1445
- "sass",
1446
- "scss",
1447
- "less",
1448
- "stylus",
1449
- "postcss"
1450
- ] }
1451
- }],
1524
+ "vue/require-default-prop": "off",
1452
1525
  "vue/require-macro-variable-name": ["error", {
1453
1526
  defineProps: "props",
1454
1527
  defineEmits: "emit",
@@ -1456,74 +1529,16 @@ async function vue({ overrides, typescript: typescript$1 } = {}) {
1456
1529
  useSlots: "slots",
1457
1530
  useAttrs: "attrs"
1458
1531
  }],
1532
+ "vue/require-prop-types": "off",
1459
1533
  "vue/require-typed-ref": "error",
1460
- "vue/no-static-inline-styles": ["error", { allowBinding: true }],
1461
- "vue/no-console": ["error", { allow: [
1462
- "error",
1463
- "warn",
1464
- "table",
1465
- "time"
1466
- ] }],
1534
+ "vue/singleline-html-element-content-newline": "off",
1535
+ "vue/template-curly-spacing": "off",
1467
1536
  "vue/v-bind-style": [
1468
1537
  "error",
1469
1538
  "shorthand",
1470
1539
  { sameNameShorthand: "always" }
1471
1540
  ],
1472
1541
  "vue/v-for-delimiter-style": ["error", "in"],
1473
- "vue/attributes-order": ["error", {
1474
- order: [
1475
- "DEFINITION",
1476
- "LIST_RENDERING",
1477
- "CONDITIONALS",
1478
- "RENDER_MODIFIERS",
1479
- "TWO_WAY_BINDING",
1480
- "OTHER_DIRECTIVES",
1481
- ["UNIQUE", "SLOT"],
1482
- "GLOBAL",
1483
- "OTHER_ATTR",
1484
- "EVENTS",
1485
- "CONTENT"
1486
- ],
1487
- alphabetical: true
1488
- }],
1489
- "vue/prefer-true-attribute-shorthand": "error",
1490
- "vue/prefer-define-options": "error",
1491
- "vue/html-comment-content-newline": ["error", {
1492
- singleline: "ignore",
1493
- multiline: "always"
1494
- }],
1495
- "vue/html-comment-indent": ["error", "tab"],
1496
- "vue/html-self-closing": ["error", {
1497
- html: {
1498
- void: "always",
1499
- normal: "always",
1500
- component: "always"
1501
- },
1502
- svg: "always",
1503
- math: "always"
1504
- }],
1505
- "vue/no-useless-concat": "error",
1506
- "so1ve/vue-root-element-sort-attributes": "error",
1507
- "vue/no-multiple-template-root": "off",
1508
- "vue/multiline-html-element-content-newline": "off",
1509
- "vue/singleline-html-element-content-newline": "off",
1510
- "vue/array-bracket-spacing": "off",
1511
- "vue/arrow-spacing": "off",
1512
- "vue/block-spacing": "off",
1513
- "vue/brace-style": "off",
1514
- "vue/comma-dangle": "off",
1515
- "vue/comma-spacing": "off",
1516
- "vue/comma-style": "off",
1517
- "vue/operator-linebreak": "off",
1518
- "vue/template-curly-spacing": "off",
1519
- "vue/key-spacing": "off",
1520
- "vue/keyword-spacing": "off",
1521
- "vue/html-quotes": "off",
1522
- "vue/html-indent": "off",
1523
- "vue/no-multi-spaces": "off",
1524
- "vue/max-attributes-per-line": "off",
1525
- "vue/html-closing-bracket-spacing": "off",
1526
- "vue/mustache-interpolation-spacing": "off",
1527
1542
  ...overrides
1528
1543
  }
1529
1544
  }];
@@ -1543,8 +1558,8 @@ async function yaml({ overrides } = {}) {
1543
1558
  rules: {
1544
1559
  ...renameRules(pluginYaml.configs.prettier.rules, { yml: "yaml" }),
1545
1560
  ...renameRules(pluginYaml.configs.recommended.rules, { yml: "yaml" }),
1546
- "yaml/no-empty-document": "off",
1547
1561
  "style/spaced-comment": "off",
1562
+ "yaml/no-empty-document": "off",
1548
1563
  ...overrides
1549
1564
  }
1550
1565
  }];
@@ -1585,7 +1600,7 @@ function so1ve(options = {}, ...userConfigs) {
1585
1600
  if (enableGitignore) if (typeof enableGitignore === "boolean") {
1586
1601
  if (fs.existsSync(".gitignore")) configs.push(interopDefault(import("eslint-config-flat-gitignore")).then((r) => [r()]));
1587
1602
  } else configs.push(interopDefault(import("eslint-config-flat-gitignore")).then((r) => [r(enableGitignore)]));
1588
- configs.push(ignores(), javascript({ overrides: getOverrides(options, "javascript") }), comments(), node(), onlyError(), promise(), sortImports(), imports(), unicorn());
1603
+ configs.push(ignores(), javascript({ overrides: getOverrides(options, "javascript") }), comments(), node(), onlyError(), promise(), sortImports(), imports(), unicorn(), command());
1589
1604
  if (enableCatalogs) configs.push(pnpm());
1590
1605
  if (enableVue) componentExts.push("vue");
1591
1606
  if (options.html ?? true) configs.push(html());
@@ -1629,4 +1644,4 @@ function getOverrides(options, key) {
1629
1644
  }
1630
1645
 
1631
1646
  //#endregion
1632
- export { GLOB_ALL_SRC, GLOB_ASTRO, GLOB_ASTRO_TS, GLOB_CSS, GLOB_DTS, GLOB_ESLINTRC, GLOB_EXCLUDE, GLOB_HTML, GLOB_JS, GLOB_JSON, GLOB_JSON5, GLOB_JSONC, GLOB_JSX, GLOB_LESS, GLOB_MARKDOWN, GLOB_MARKDOWN_CODE, GLOB_PACKAGEJSON, GLOB_SCSS, GLOB_SRC, GLOB_SRC_EXT, GLOB_STYLE, GLOB_TESTS, GLOB_TOML, GLOB_TS, GLOB_TSCONFIG, GLOB_TSX, GLOB_VUE, GLOB_YAML, astro, comments, defaultPluginRenaming, formatting, getOverrides, html, ignores, imports, interopDefault, javascript, jsonc, mdx, node, onlyError, perfectionist, pnpm, promise, renameRules, resolveSubOptions, so1ve, solid, sortImports, test, toml, typescript, unicorn, vue, yaml };
1647
+ export { GLOB_ALL_SRC, GLOB_ASTRO, GLOB_ASTRO_TS, GLOB_CSS, GLOB_DTS, GLOB_ESLINTRC, GLOB_EXCLUDE, GLOB_HTML, GLOB_JS, GLOB_JSON, GLOB_JSON5, GLOB_JSONC, GLOB_JSX, GLOB_LESS, GLOB_MARKDOWN, GLOB_MARKDOWN_CODE, GLOB_PACKAGEJSON, GLOB_SCSS, GLOB_SRC, GLOB_SRC_EXT, GLOB_STYLE, GLOB_TESTS, GLOB_TOML, GLOB_TS, GLOB_TSCONFIG, GLOB_TSX, GLOB_VUE, GLOB_YAML, astro, command, comments, defaultPluginRenaming, formatting, getOverrides, html, ignores, imports, interopDefault, javascript, jsonc, mdx, node, onlyError, perfectionist, pnpm, promise, renameRules, resolveSubOptions, so1ve, solid, sortImports, test, toml, typescript, unicorn, vue, yaml };