@unshared/eslint-config 0.0.2 → 0.0.4

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
@@ -30,7 +30,7 @@ function typescript(options) {
30
30
  parserOptions: {
31
31
  ecmaVersion: "latest",
32
32
  sourceType: "module",
33
- project: toArray(options.tsConfigPaths ?? "./tsconfig.json"),
33
+ project: toArray(options.tsConfigPath ?? "./tsconfig.json"),
34
34
  tsconfigRootDir: cwd()
35
35
  }
36
36
  },
@@ -103,7 +103,7 @@ function typescript(options) {
103
103
  "@stylistic/no-multiple-empty-lines": ["error", {
104
104
  max: 1,
105
105
  maxBOF: 0,
106
- maxEOF: 1
106
+ maxEOF: 0
107
107
  }],
108
108
  /**
109
109
  * Enforce a trailing comma after the last element or property in a multiline
@@ -174,6 +174,7 @@ function typescript(options) {
174
174
  "function-call-spacing": "off",
175
175
  "generator-star-spacing": "off",
176
176
  "template-curly-spacing": "off",
177
+ "object-property-newline ": "off",
177
178
  "newline-per-chained-call": "off",
178
179
  "computed-property-spacing": "off",
179
180
  "lines-between-class-members": "off",
@@ -195,6 +196,7 @@ function typescript(options) {
195
196
  "@stylistic/array-bracket-newline": ["error", "consistent"],
196
197
  "@stylistic/function-call-spacing": ["error", "never"],
197
198
  "@stylistic/template-curly-spacing": ["error", "never"],
199
+ "@stylistic/object-property-newline": ["error", { allowAllPropertiesOnSameLine: !0 }],
198
200
  "@stylistic/generator-star-spacing": ["error", { before: !0, after: !0 }],
199
201
  "@stylistic/computed-property-spacing": ["error", "never"],
200
202
  "@stylistic/multiline-ternary": ["error", "always-multiline"],
@@ -270,6 +272,10 @@ function typescript(options) {
270
272
  disallowTypeAnnotations: !1,
271
273
  prefer: "no-type-imports"
272
274
  }],
275
+ "perfectionist/sort-exports": ["error", {
276
+ type: "alphabetical",
277
+ "ignore-case": !1
278
+ }],
273
279
  "perfectionist/sort-named-imports": ["error", { type: "natural" }],
274
280
  "perfectionist/sort-imports": ["error", {
275
281
  "newlines-between": "never",
@@ -370,10 +376,10 @@ function typescript(options) {
370
376
  }
371
377
  ];
372
378
  }
373
- const VUE_RECOMMENDED_RULES = vuePlugin.configs?.["flat/recommended"].rules, VUE_BASE_RULES = vuePlugin.configs?.base.rules;
374
379
  function vue(options) {
375
380
  const TYPESCRIPT_CONFIG = typescript(options).at(1);
376
381
  return [
382
+ ...vuePlugin.configs?.["flat/base"],
377
383
  {
378
384
  plugins: {
379
385
  vue: vuePlugin,
@@ -412,11 +418,21 @@ function vue(options) {
412
418
  "**/*.vue"
413
419
  ],
414
420
  rules: {
415
- ...VUE_BASE_RULES,
416
- ...VUE_RECOMMENDED_RULES,
417
421
  ...TYPESCRIPT_CONFIG.rules,
418
- "@typescript-eslint/no-unsafe-assignment": "off",
422
+ // @ts-expect-error: ignore
423
+ ...vuePlugin.configs["flat/recommended"].rules,
424
+ // @ts-expect-error: ignore
425
+ ...vuePlugin.configs["flat/strongly-recommended"].rules,
426
+ // @ts-expect-error: ignore
427
+ ...vuePlugin.configs["flat/essential"].rules,
428
+ /**
429
+ * Disable some TypeScript rules that may conflict with the Vue SFC parser.
430
+ */
419
431
  "@typescript-eslint/no-unsafe-call": "off",
432
+ "@typescript-eslint/no-unsafe-return": "off",
433
+ "@typescript-eslint/no-misused-promises": "off",
434
+ "@typescript-eslint/no-unsafe-assignment": "off",
435
+ "@typescript-eslint/no-unsafe-member-access": "off",
420
436
  /**
421
437
  * Enforces consistent usage of type imports. This rule will enforce the use
422
438
  * of `type` imports to make it easier for the Vue SFC compiler to analyze
@@ -425,11 +441,11 @@ function vue(options) {
425
441
  * @see https://typescript-eslint.io/rules/consistent-type-imports
426
442
  * @see https://vuejs.github.io/vetur/guide/FAQ.html#why-does-vetur-show-cannot-find-module-xxx
427
443
  */
428
- "@typescript-eslint/consistent-type-imports": ["error", {
429
- disallowTypeAnnotations: !1,
430
- fixStyle: "inline-type-imports",
431
- prefer: "type-imports"
432
- }],
444
+ // '@typescript-eslint/consistent-type-imports': ['error', {
445
+ // disallowTypeAnnotations: false,
446
+ // fixStyle: 'inline-type-imports',
447
+ // prefer: 'type-imports',
448
+ // }],
433
449
  /**
434
450
  * Enforce the order of the top-level properties in the component. This rule
435
451
  * helps to maintain consistency and readability by enforcing a predictable
@@ -451,7 +467,9 @@ function vue(options) {
451
467
  * consistency and maintainability.
452
468
  *
453
469
  * @see https://eslint.vuejs.org/rules/vue/prefer-define-options.html
470
+ * @see https://eslint.vuejs.org/rules/vue/component-api-style.html
454
471
  */
472
+ "vue/prefer-define-options": "error",
455
473
  "vue/component-api-style": ["error", ["script-setup"]],
456
474
  /**
457
475
  * Enforce the component name casing to be PascalCase. This rules helps identify
@@ -471,6 +489,10 @@ function vue(options) {
471
489
  * @see https://eslint.vuejs.org/rules/html-comment-content-newline.html
472
490
  */
473
491
  "vue/html-comment-content-spacing": ["error", "always"],
492
+ "vue/html-comment-content-newline": ["error", {
493
+ multiline: "always",
494
+ singleline: "never"
495
+ }],
474
496
  /**
475
497
  * Enforce consistent spacing between HTML / Component tags. This makes it
476
498
  * easier to read and understand the structure of the component.
@@ -478,11 +500,17 @@ function vue(options) {
478
500
  * @see https://eslint.vuejs.org/rules/padding-line-between-blocks.html
479
501
  * @see https://eslint.vuejs.org/rules/padding-line-between-tags.html
480
502
  */
481
- "vue/html-comment-indent": ["error", 2],
503
+ "vue/padding-line-between-blocks": ["error", "always"],
482
504
  "vue/padding-line-between-tags": ["error", [
483
505
  { blankLine: "consistent", next: "*", prev: "*" },
484
506
  { blankLine: "always", next: "*", prev: "comment" }
485
507
  ]],
508
+ "vue/html-comment-indent": ["error", 2],
509
+ "vue/multiline-html-element-content-newline": ["error", {
510
+ allowEmptyLines: !0,
511
+ ignores: [],
512
+ ignoreWhenEmpty: !0
513
+ }],
486
514
  /**
487
515
  * Enforce consistent spacing and newlines in the template. This rule helps
488
516
  * to maintain consistency and readability by enforcing a predictable
@@ -512,11 +540,7 @@ function vue(options) {
512
540
  * @see https://eslint.vuejs.org/rules/multi-word-component-names.html
513
541
  */
514
542
  "vue/multi-word-component-names": "off",
515
- "vue/multiline-html-element-content-newline": ["error", {
516
- allowEmptyLines: !0,
517
- ignores: [],
518
- ignoreWhenEmpty: !0
519
- }],
543
+ "vue/no-reserved-component-names": "off",
520
544
  /**
521
545
  * Reports the destructuring or member expression of props passed to setup
522
546
  * causing the value to lose reactivity. This rule helps to avoid common
@@ -549,6 +573,7 @@ function vue(options) {
549
573
  * @see https://eslint.vuejs.org/rules/v-on-handler-style.html
550
574
  */
551
575
  "vue/v-on-style": ["error", "shorthand"],
576
+ "vue/return-in-computed-property": "off",
552
577
  "vue/no-sparse-arrays": "error",
553
578
  "vue/no-unused-emit-declarations": "error",
554
579
  "vue/no-use-v-else-with-v-for": "error",
@@ -566,8 +591,6 @@ function vue(options) {
566
591
  }
567
592
  ],
568
593
  "vue/operator-linebreak": ["error", "before"],
569
- "vue/padding-line-between-blocks": ["error", "always"],
570
- "vue/prefer-define-options": "error",
571
594
  "vue/prefer-import-from-vue": "off",
572
595
  "vue/prefer-separate-static-class": "error",
573
596
  "vue/prefer-template": "error",
@@ -607,10 +630,6 @@ function vue(options) {
607
630
  },
608
631
  singleline: "never"
609
632
  }],
610
- "vue/html-comment-content-newline": ["error", {
611
- multiline: "always",
612
- singleline: "never"
613
- }],
614
633
  "vue/no-constant-condition": "warn",
615
634
  "vue/no-empty-pattern": "error",
616
635
  "vue/no-extra-parens": ["error", "functions"],
@@ -628,12 +647,14 @@ function vue(options) {
628
647
  "vue/space-infix-ops": "error",
629
648
  "vue/space-unary-ops": ["error", { nonwords: !1, words: !0 }],
630
649
  "vue/template-curly-spacing": "error",
631
- "vue/v-on-handler-style": ["error", "inline"]
650
+ "vue/v-on-handler-style": ["error", "inline"],
651
+ /** User-defined rules */
652
+ ...options.rules
632
653
  }
633
654
  }
634
655
  ];
635
656
  }
636
- function vitest() {
657
+ function vitest(options) {
637
658
  return [
638
659
  {
639
660
  plugins: {
@@ -717,13 +738,15 @@ function vitest() {
717
738
  mustMatch: {
718
739
  test: ["^should"]
719
740
  }
720
- }]
741
+ }],
742
+ /** User-defined rules */
743
+ ...options.rules
721
744
  }
722
745
  }
723
746
  ];
724
747
  }
725
748
  const UNICORN_RECOMMENDED_RULES = unicornPlugin.configs.recommended.rules;
726
- function unicorn() {
749
+ function unicorn(options) {
727
750
  return [
728
751
  {
729
752
  plugins: {
@@ -827,11 +850,13 @@ function unicorn() {
827
850
  }
828
851
  }],
829
852
  "unicorn/throw-new-error": "error"
830
- }
853
+ },
854
+ /** User-defined rules */
855
+ ...options.rules
831
856
  }
832
857
  ];
833
858
  }
834
- function sonarjs() {
859
+ function sonarjs(options) {
835
860
  return new FlatCompat().config({
836
861
  extends: [
837
862
  "plugin:sonarjs/recommended"
@@ -868,11 +893,13 @@ function sonarjs() {
868
893
  "sonarjs/no-one-iteration-loop": "off",
869
894
  "sonarjs/no-redundant-jump": "off",
870
895
  "sonarjs/no-unused-collection": "off",
871
- "sonarjs/no-use-of-empty-return-value": "off"
896
+ "sonarjs/no-use-of-empty-return-value": "off",
897
+ /** User-defined rules */
898
+ ...options.rules
872
899
  }
873
900
  });
874
901
  }
875
- function node() {
902
+ function node(options) {
876
903
  return [
877
904
  {
878
905
  plugins: {
@@ -922,7 +949,9 @@ function node() {
922
949
  *
923
950
  * @see https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/prefer-node-protocol.md
924
951
  */
925
- "n/prefer-node-protocol": "error"
952
+ "n/prefer-node-protocol": "error",
953
+ /** User-defined rules */
954
+ ...options.rules
926
955
  },
927
956
  settings: {
928
957
  node: {
@@ -1134,7 +1163,7 @@ function jsonPackage() {
1134
1163
  }
1135
1164
  ];
1136
1165
  }
1137
- function configJson() {
1166
+ function configJson(options) {
1138
1167
  return [
1139
1168
  ...jsonc.configs["flat/recommended-with-json"],
1140
1169
  {
@@ -1148,12 +1177,14 @@ function configJson() {
1148
1177
  *
1149
1178
  * @see https://ota-meshi.github.io/eslint-plugin-jsonc/rules/auto.html
1150
1179
  */
1151
- "jsonc/auto": "error"
1180
+ "jsonc/auto": "error",
1181
+ /** User-defined rules */
1182
+ ...options.rules
1152
1183
  }
1153
1184
  }
1154
1185
  ];
1155
1186
  }
1156
- function jsdoc() {
1187
+ function jsdoc(options) {
1157
1188
  return [
1158
1189
  pluginJsdoc.configs["flat/recommended-typescript-flavor-error"],
1159
1190
  {
@@ -1215,12 +1246,14 @@ function jsdoc() {
1215
1246
  *
1216
1247
  * @see https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/tag-lines.md
1217
1248
  */
1218
- "jsdoc/tag-lines": ["error", "any", { startLines: 1 }]
1249
+ "jsdoc/tag-lines": ["error", "any", { startLines: 1 }],
1250
+ /** User-defined rules */
1251
+ ...options.rules
1219
1252
  }
1220
1253
  }
1221
1254
  ];
1222
1255
  }
1223
- function eslintComments() {
1256
+ function eslintComments(options) {
1224
1257
  return [
1225
1258
  {
1226
1259
  plugins: {
@@ -1263,12 +1296,14 @@ function eslintComments() {
1263
1296
  *
1264
1297
  * @see https://mysticatea.github.io/eslint-plugin-eslint-comments/rules/no-unused-disable
1265
1298
  */
1266
- "eslint-comments/no-unused-disable": "error"
1299
+ "eslint-comments/no-unused-disable": "error",
1300
+ /** User-defined rules */
1301
+ ...options.rules
1267
1302
  }
1268
1303
  }
1269
1304
  ];
1270
1305
  }
1271
- function antfu() {
1306
+ function antfu(options) {
1272
1307
  return [
1273
1308
  {
1274
1309
  plugins: {
@@ -1300,27 +1335,27 @@ function antfu() {
1300
1335
  *
1301
1336
  * @see https://github.com/antfu/eslint-plugin-antfu/blob/main/src/rules/consistent-list-newline.md
1302
1337
  */
1303
- "object-curly-newline": "off"
1338
+ "object-curly-newline": "off",
1339
+ /** User-defined rules */
1340
+ ...options.rules
1304
1341
  }
1305
1342
  }
1306
1343
  ];
1307
1344
  }
1308
1345
  function all(options = {}) {
1309
1346
  return [
1310
- ...antfu(),
1311
- ...eslintComments(),
1312
- ...jsdoc(),
1313
- ...configJson(),
1347
+ ...antfu(options),
1348
+ ...eslintComments(options),
1349
+ ...jsdoc(options),
1350
+ ...configJson(options),
1314
1351
  ...jsonPackage(),
1315
1352
  ...jsonTsconfig(),
1316
- ...node(),
1317
- ...sonarjs(),
1353
+ ...node(options),
1354
+ ...sonarjs(options),
1318
1355
  ...typescript(options),
1319
- ...unicorn(),
1320
- ...vitest(),
1356
+ ...unicorn(options),
1357
+ ...vitest(options),
1321
1358
  ...vue(options),
1322
- // ...promise(),
1323
- // ...markdown(),
1324
1359
  {
1325
1360
  ignores: [
1326
1361
  "**/dist",