@ntnyq/eslint-config 4.0.0-beta.3 → 4.0.0-beta.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
@@ -184,58 +184,45 @@ var sharedRules = {
184
184
  ...default3.configs["vue3-recommended"].rules
185
185
  };
186
186
  var disabledRules = {
187
- "vue/no-v-html": "off",
188
- "vue/require-prop-types": "off",
189
- "vue/require-default-prop": "off",
190
187
  "vue/multi-word-component-names": "off",
188
+ "vue/no-setup-props-reactivity-loss": "off",
189
+ "vue/no-v-html": "off",
191
190
  "vue/no-v-text-v-html-on-component": "off",
192
- "vue/no-setup-props-reactivity-loss": "off"
191
+ "vue/require-default-prop": "off",
192
+ "vue/require-prop-types": "off"
193
193
  };
194
194
  var extensionRules = {
195
- "vue/prefer-template": "error",
196
- "vue/no-sparse-arrays": "error",
197
- "vue/no-empty-pattern": "error",
198
- "vue/space-infix-ops": "error",
199
- "vue/no-loss-of-precision": "error",
200
- "vue/no-constant-condition": "error",
201
- "vue/template-curly-spacing": "error",
202
- "vue/eqeqeq": ["error", "smart"],
203
- "vue/comma-style": ["error", "last"],
204
- "vue/block-spacing": ["error", "always"],
205
- "vue/dot-location": ["error", "property"],
206
- "vue/space-in-parens": ["error", "never"],
207
- "vue/operator-linebreak": ["error", "before"],
208
- "vue/no-extra-parens": ["error", "functions"],
209
195
  "vue/array-bracket-spacing": ["error", "never"],
210
- "vue/object-curly-spacing": ["error", "always"],
211
- "vue/comma-dangle": ["error", "always-multiline"],
212
- "vue/quote-props": ["error", "consistent-as-needed"],
213
- "vue/arrow-spacing": ["error", { before: true, after: true }],
196
+ "vue/arrow-spacing": ["error", { after: true, before: true }],
197
+ "vue/block-spacing": ["error", "always"],
214
198
  "vue/brace-style": ["error", "stroustrup", { allowSingleLine: true }],
215
- "vue/comma-spacing": ["error", { before: false, after: true }],
199
+ "vue/comma-dangle": ["error", "always-multiline"],
200
+ "vue/comma-spacing": ["error", { after: true, before: false }],
201
+ "vue/comma-style": ["error", "last"],
202
+ "vue/dot-location": ["error", "property"],
216
203
  "vue/dot-notation": ["error", { allowKeywords: true }],
217
- "vue/key-spacing": ["error", { beforeColon: false, afterColon: true }],
218
- "vue/keyword-spacing": ["error", { before: true, after: true }],
204
+ "vue/eqeqeq": ["error", "smart"],
205
+ "vue/key-spacing": ["error", { afterColon: true, beforeColon: false }],
206
+ "vue/keyword-spacing": ["error", { after: true, before: true }],
207
+ "vue/no-constant-condition": "error",
208
+ "vue/no-empty-pattern": "error",
209
+ "vue/no-extra-parens": ["error", "functions"],
210
+ "vue/no-loss-of-precision": "error",
219
211
  "vue/no-restricted-syntax": [
220
212
  "error",
221
213
  "DebuggerStatement",
222
214
  "LabeledStatement",
223
215
  "WithStatement"
224
216
  ],
225
- "vue/space-unary-ops": [
226
- "error",
227
- {
228
- words: true,
229
- nonwords: false
230
- }
231
- ],
217
+ "vue/no-sparse-arrays": "error",
232
218
  "vue/object-curly-newline": [
233
219
  "error",
234
220
  {
235
- multiline: true,
236
- consistent: true
221
+ consistent: true,
222
+ multiline: true
237
223
  }
238
224
  ],
225
+ "vue/object-curly-spacing": ["error", "always"],
239
226
  "vue/object-property-newline": [
240
227
  "error",
241
228
  {
@@ -246,139 +233,152 @@ var extensionRules = {
246
233
  "error",
247
234
  "always",
248
235
  {
249
- ignoreConstructors: false,
250
- avoidQuotes: true
236
+ avoidQuotes: true,
237
+ ignoreConstructors: false
251
238
  }
252
- ]
239
+ ],
240
+ "vue/operator-linebreak": ["error", "before"],
241
+ "vue/prefer-template": "error",
242
+ "vue/quote-props": ["error", "consistent-as-needed"],
243
+ "vue/space-in-parens": ["error", "never"],
244
+ "vue/space-infix-ops": "error",
245
+ "vue/space-unary-ops": [
246
+ "error",
247
+ {
248
+ nonwords: false,
249
+ words: true
250
+ }
251
+ ],
252
+ "vue/template-curly-spacing": "error"
253
253
  };
254
254
  var unCategorizedRules = {
255
- "vue/no-v-text": "error",
256
- "vue/no-useless-v-bind": "error",
257
- "vue/valid-define-options": "error",
258
- "vue/prefer-define-options": "error",
259
- "vue/prefer-use-template-ref": "error",
260
- "vue/no-irregular-whitespace": "error",
261
- "vue/no-use-v-else-with-v-for": "error",
262
- "vue/no-deprecated-delete-set": "error",
263
- "vue/no-empty-component-block": "error",
264
- "vue/require-typed-object-prop": "error",
265
- "vue/no-unused-emit-declarations": "error",
266
- "vue/padding-line-between-blocks": "error",
267
- "vue/no-multiple-objects-in-class": "error",
268
- "vue/prefer-separate-static-class": "error",
269
- "vue/no-ref-object-reactivity-loss": "error",
270
- "vue/prefer-prop-type-boolean-first": "error",
271
- "vue/html-comment-indent": ["error", 2],
272
- "vue/next-tick-style": ["error", "promise"],
273
- "vue/v-for-delimiter-style": ["error", "in"],
274
- "vue/no-restricted-v-bind": ["error", "/^v-/"],
275
- "vue/slot-name-casing": ["error", "kebab-case"],
276
- "vue/custom-event-name-casing": ["error", "camelCase"],
277
- "vue/define-props-declaration": ["error", "type-based"],
278
- "vue/define-emits-declaration": ["error", "type-literal"],
279
- "vue/prefer-true-attribute-shorthand": ["error", "always"],
280
- "vue/component-options-name-casing": ["error", "PascalCase"],
281
- "vue/component-api-style": ["error", ["script-setup", "composition"]],
282
- "vue/html-button-has-type": [
255
+ "vue/block-order": [
283
256
  "error",
284
257
  {
285
- button: true,
286
- submit: true,
287
- reset: true
258
+ order: ["script", "template", "style"]
288
259
  }
289
260
  ],
290
- "vue/no-duplicate-attr-inheritance": [
261
+ "vue/block-tag-newline": [
291
262
  "error",
292
263
  {
293
- checkMultiRootNodes: true
264
+ multiline: "always",
265
+ singleline: "always"
294
266
  }
295
267
  ],
296
- "vue/block-order": [
268
+ "vue/component-api-style": ["error", ["script-setup", "composition"]],
269
+ "vue/component-name-in-template-casing": [
297
270
  "error",
271
+ "PascalCase",
298
272
  {
299
- order: ["script", "template", "style"]
273
+ ignores: ["slot", "component"],
274
+ // Force auto-import components to be PascalCase
275
+ registeredComponentsOnly: false
300
276
  }
301
277
  ],
302
- "vue/enforce-style-attribute": [
278
+ "vue/component-options-name-casing": ["error", "PascalCase"],
279
+ "vue/custom-event-name-casing": ["error", "camelCase"],
280
+ "vue/define-emits-declaration": ["error", "type-literal"],
281
+ "vue/define-macros-order": [
303
282
  "error",
304
283
  {
305
- allow: ["scoped", "plain"]
284
+ defineExposeLast: true,
285
+ order: [
286
+ "defineProps",
287
+ "defineEmits",
288
+ "defineOptions",
289
+ "defineSlots",
290
+ "defineModel"
291
+ ]
306
292
  }
307
293
  ],
308
- "vue/block-tag-newline": [
294
+ "vue/define-props-declaration": ["error", "type-based"],
295
+ "vue/enforce-style-attribute": [
309
296
  "error",
310
297
  {
311
- singleline: "always",
312
- multiline: "always"
298
+ allow: ["scoped", "plain"]
313
299
  }
314
300
  ],
315
- "vue/no-required-prop-with-default": [
301
+ "vue/html-button-has-type": [
316
302
  "error",
317
303
  {
318
- autofix: true
304
+ button: true,
305
+ reset: true,
306
+ submit: true
319
307
  }
320
308
  ],
321
309
  "vue/html-comment-content-newline": [
322
310
  "error",
323
311
  {
324
- singleline: "ignore",
325
- multiline: "always"
312
+ multiline: "always",
313
+ singleline: "ignore"
326
314
  },
327
315
  {
328
316
  exceptions: ["*"]
329
317
  }
330
318
  ],
331
- "vue/no-static-inline-styles": [
319
+ "vue/html-comment-content-spacing": [
332
320
  "error",
321
+ "always",
333
322
  {
334
- allowBinding: true
323
+ exceptions: ["-"]
335
324
  }
336
325
  ],
326
+ "vue/html-comment-indent": ["error", 2],
327
+ "vue/next-tick-style": ["error", "promise"],
328
+ "vue/no-deprecated-delete-set": "error",
337
329
  "vue/no-deprecated-model-definition": [
338
330
  "error",
339
331
  {
340
332
  allowVue3Compat: true
341
333
  }
342
334
  ],
343
- "vue/component-name-in-template-casing": [
335
+ "vue/no-duplicate-attr-inheritance": [
344
336
  "error",
345
- "PascalCase",
346
337
  {
347
- // Force auto-import components to be PascalCase
348
- registeredComponentsOnly: false,
349
- ignores: ["slot", "component"]
338
+ checkMultiRootNodes: true
350
339
  }
351
340
  ],
352
- "vue/define-macros-order": [
341
+ "vue/no-empty-component-block": "error",
342
+ "vue/no-irregular-whitespace": "error",
343
+ "vue/no-multiple-objects-in-class": "error",
344
+ "vue/no-ref-object-reactivity-loss": "error",
345
+ "vue/no-required-prop-with-default": [
353
346
  "error",
354
347
  {
355
- order: [
356
- "defineProps",
357
- "defineEmits",
358
- "defineOptions",
359
- "defineSlots",
360
- "defineModel"
361
- ],
362
- defineExposeLast: true
348
+ autofix: true
363
349
  }
364
350
  ],
365
- "vue/html-comment-content-spacing": [
351
+ "vue/no-restricted-v-bind": ["error", "/^v-/"],
352
+ "vue/no-static-inline-styles": [
366
353
  "error",
367
- "always",
368
354
  {
369
- exceptions: ["-"]
355
+ allowBinding: true
370
356
  }
371
357
  ],
358
+ "vue/no-unused-emit-declarations": "error",
359
+ "vue/no-use-v-else-with-v-for": "error",
360
+ "vue/no-useless-v-bind": "error",
361
+ "vue/no-v-text": "error",
362
+ "vue/padding-line-between-blocks": "error",
363
+ "vue/prefer-define-options": "error",
364
+ "vue/prefer-prop-type-boolean-first": "error",
365
+ "vue/prefer-separate-static-class": "error",
366
+ "vue/prefer-true-attribute-shorthand": ["error", "always"],
367
+ "vue/prefer-use-template-ref": "error",
372
368
  "vue/require-macro-variable-name": [
373
369
  "error",
374
370
  {
375
- defineProps: "props",
376
371
  defineEmits: "emits",
372
+ defineProps: "props",
377
373
  defineSlots: "slots",
378
- useSlots: "slots",
379
- useAttrs: "attrs"
374
+ useAttrs: "attrs",
375
+ useSlots: "slots"
380
376
  }
381
- ]
377
+ ],
378
+ "vue/require-typed-object-prop": "error",
379
+ "vue/slot-name-casing": ["error", "kebab-case"],
380
+ "vue/v-for-delimiter-style": ["error", "in"],
381
+ "vue/valid-define-options": "error"
382
382
  };
383
383
  var configVue = (options = {}) => {
384
384
  const { files = [GLOB_VUE] } = options;
@@ -401,45 +401,32 @@ var configVue = (options = {}) => {
401
401
  {
402
402
  name: "ntnyq/vue/setup",
403
403
  plugins: {
404
- vue: default3,
405
- "@typescript-eslint": plugin
404
+ "@typescript-eslint": plugin,
405
+ vue: default3
406
406
  }
407
407
  },
408
408
  {
409
409
  name: "ntnyq/vue/rules",
410
410
  files,
411
+ processor: getVueProcessor(),
411
412
  languageOptions: {
412
413
  parser: parserVue,
413
414
  parserOptions: {
414
- sourceType: "module",
415
415
  ecmaVersion: "latest",
416
416
  extraFileExtensions: [".vue"],
417
417
  parser: parserTypeScript,
418
+ sourceType: "module",
418
419
  ecmaFeatures: {
419
420
  jsx: true
420
421
  }
421
422
  }
422
423
  },
423
- processor: getVueProcessor(),
424
424
  rules: {
425
425
  ...sharedRules,
426
- "vue/html-self-closing": [
427
- "error",
428
- {
429
- html: {
430
- void: "always",
431
- normal: "always",
432
- component: "always"
433
- },
434
- svg: "always",
435
- math: "always"
436
- }
437
- ],
438
- "vue/this-in-template": ["error", "never"],
439
- "vue/prop-name-casing": ["error", "camelCase"],
440
426
  "vue/attributes-order": [
441
427
  "error",
442
428
  {
429
+ alphabetical: false,
443
430
  order: [
444
431
  "EVENTS",
445
432
  // `@click="functionCall"`, `v-on="event"`
@@ -470,8 +457,26 @@ var configVue = (options = {}) => {
470
457
  // `prop="foo", `static attributes
471
458
  "ATTR_SHORTHAND_BOOL"
472
459
  // `disabled`, prop shorthand
473
- ],
474
- alphabetical: false
460
+ ]
461
+ }
462
+ ],
463
+ "vue/html-self-closing": [
464
+ "error",
465
+ {
466
+ math: "always",
467
+ svg: "always",
468
+ html: {
469
+ component: "always",
470
+ normal: "always",
471
+ void: "always"
472
+ }
473
+ }
474
+ ],
475
+ "vue/max-attributes-per-line": [
476
+ "error",
477
+ {
478
+ multiline: 1,
479
+ singleline: 1
475
480
  }
476
481
  ],
477
482
  "vue/order-in-components": [
@@ -514,13 +519,8 @@ var configVue = (options = {}) => {
514
519
  ]
515
520
  }
516
521
  ],
517
- "vue/max-attributes-per-line": [
518
- "error",
519
- {
520
- singleline: 1,
521
- multiline: 1
522
- }
523
- ],
522
+ "vue/prop-name-casing": ["error", "camelCase"],
523
+ "vue/this-in-template": ["error", "never"],
524
524
  ...disabledRules,
525
525
  ...extensionRules,
526
526
  ...unCategorizedRules,
@@ -536,12 +536,12 @@ var configYml = (options = {}) => [
536
536
  {
537
537
  name: "ntnyq/yml",
538
538
  files: [GLOB_YAML],
539
- languageOptions: {
540
- parser: parserYaml
541
- },
542
539
  plugins: {
543
540
  yml: default4
544
541
  },
542
+ languageOptions: {
543
+ parser: parserYaml
544
+ },
545
545
  rules: {
546
546
  ...default4.configs.standard.rules,
547
547
  ...default4.configs.prettier.rules,
@@ -579,10 +579,12 @@ var configNode = (options = {}) => [
579
579
  var configSort = (options = {}) => {
580
580
  const configs2 = [];
581
581
  const {
582
- tsconfig: enableSortTsconfig = true,
583
- packageJson: enableSortPackageJson = true,
582
+ additionalJsonFiles = [],
583
+ additionalYamlFiles = [],
584
584
  i18nLocale: enableSortI18nLocale = true,
585
- pnpmWorkspace: enableSortPnpmWorkspace = true
585
+ packageJson: enableSortPackageJson = true,
586
+ pnpmWorkspace: enableSortPnpmWorkspace = true,
587
+ tsconfig: enableSortTsconfig = true
586
588
  } = options;
587
589
  if (enableSortTsconfig) {
588
590
  configs2.push({
@@ -592,17 +594,20 @@ var configSort = (options = {}) => {
592
594
  "jsonc/sort-keys": [
593
595
  "error",
594
596
  {
597
+ pathPattern: "^$",
595
598
  order: [
596
599
  "extends",
597
600
  "compilerOptions",
598
601
  "references",
599
602
  "files",
600
603
  "include",
601
- "exclude"
602
- ],
603
- pathPattern: "^$"
604
+ "exclude",
605
+ // vue.volar
606
+ "vueCompilerOptions"
607
+ ]
604
608
  },
605
609
  {
610
+ pathPattern: "^compilerOptions$",
606
611
  order: [
607
612
  /* Projects */
608
613
  "incremental",
@@ -700,8 +705,7 @@ var configSort = (options = {}) => {
700
705
  /* Completeness */
701
706
  "skipDefaultLibCheck",
702
707
  "skipLibCheck"
703
- ],
704
- pathPattern: "^compilerOptions$"
708
+ ]
705
709
  }
706
710
  ]
707
711
  }
@@ -712,6 +716,25 @@ var configSort = (options = {}) => {
712
716
  name: "ntnyq/sort/package-json",
713
717
  files: ["**/package.json"],
714
718
  rules: {
719
+ "jsonc/sort-array-values": [
720
+ "error",
721
+ {
722
+ order: { type: "asc" },
723
+ pathPattern: "^files$"
724
+ },
725
+ {
726
+ order: { type: "asc" },
727
+ pathPattern: "^keywords$"
728
+ },
729
+ {
730
+ order: { type: "asc" },
731
+ pathPattern: "^activationEvents$"
732
+ },
733
+ {
734
+ order: { type: "asc" },
735
+ pathPattern: "^contributes.*$"
736
+ }
737
+ ],
715
738
  "jsonc/sort-keys": [
716
739
  "error",
717
740
  {
@@ -807,8 +830,8 @@ var configSort = (options = {}) => {
807
830
  ]
808
831
  },
809
832
  {
810
- pathPattern: "^(?:dev|peer|optional|bundled)?[Dd]ependencies(Meta)?$",
811
- order: { type: "asc" }
833
+ order: { type: "asc" },
834
+ pathPattern: "^(?:dev|peer|optional|bundled)?[Dd]ependencies(Meta)?$"
812
835
  },
813
836
  {
814
837
  order: { type: "asc" },
@@ -816,7 +839,18 @@ var configSort = (options = {}) => {
816
839
  },
817
840
  {
818
841
  pathPattern: "^exports.*$",
819
- order: ["types", "import", "require", "default"]
842
+ order: [
843
+ "./package.json",
844
+ "types",
845
+ "import",
846
+ "require",
847
+ "default",
848
+ {
849
+ order: {
850
+ type: "asc"
851
+ }
852
+ }
853
+ ]
820
854
  },
821
855
  // VSCode extension
822
856
  {
@@ -828,15 +862,27 @@ var configSort = (options = {}) => {
828
862
  * @see {@link https://pnpm.io/package_json#publishconfig}
829
863
  */
830
864
  {
831
- order: { type: "asc" },
832
- pathPattern: "^publishConfig.*$"
865
+ pathPattern: "^publishConfig.*$",
866
+ order: [
867
+ "./package.json",
868
+ "types",
869
+ "import",
870
+ "require",
871
+ "default",
872
+ {
873
+ order: {
874
+ type: "asc"
875
+ }
876
+ }
877
+ ]
833
878
  },
834
879
  // npm scripts
835
880
  {
836
- pathPattern: "^scripts$",
837
- order: { type: "asc" }
881
+ order: { type: "asc" },
882
+ pathPattern: "^scripts$"
838
883
  },
839
884
  {
885
+ pathPattern: "^(?:gitHooks|husky|simple-git-hooks)$",
840
886
  order: [
841
887
  // client hooks only
842
888
  "pre-commit",
@@ -849,27 +895,7 @@ var configSort = (options = {}) => {
849
895
  "post-merge",
850
896
  "pre-push",
851
897
  "pre-auto-gc"
852
- ],
853
- pathPattern: "^(?:gitHooks|husky|simple-git-hooks)$"
854
- }
855
- ],
856
- "jsonc/sort-array-values": [
857
- "error",
858
- {
859
- pathPattern: "^files$",
860
- order: { type: "asc" }
861
- },
862
- {
863
- pathPattern: "^keywords$",
864
- order: { type: "asc" }
865
- },
866
- {
867
- pathPattern: "^activationEvents$",
868
- order: { type: "asc" }
869
- },
870
- {
871
- pathPattern: "^contributes.*$",
872
- order: { type: "asc" }
898
+ ]
873
899
  }
874
900
  ]
875
901
  }
@@ -879,26 +905,26 @@ var configSort = (options = {}) => {
879
905
  configs2.push(
880
906
  {
881
907
  name: "ntnyq/sort/i18n-locale/json",
882
- files: ["**/{locales,i18n}/*.json"],
908
+ files: ["**/{i18n,langs,locales}/*.json"],
883
909
  rules: {
884
910
  "jsonc/sort-keys": [
885
911
  "error",
886
912
  {
887
- pathPattern: ".*",
888
- order: { type: "asc" }
913
+ order: { type: "asc" },
914
+ pathPattern: ".*"
889
915
  }
890
916
  ]
891
917
  }
892
918
  },
893
919
  {
894
920
  name: "ntnyq/sort/i18n-locale/yaml",
895
- files: ["**/{locales,i18n}/*.y?(a)ml"],
921
+ files: ["**/{i18n,langs,locales}/*.y?(a)ml"],
896
922
  rules: {
897
923
  "yml/sort-keys": [
898
924
  "error",
899
925
  {
900
- pathPattern: ".*",
901
- order: { type: "asc" }
926
+ order: { type: "asc" },
927
+ pathPattern: ".*"
902
928
  }
903
929
  ]
904
930
  }
@@ -913,8 +939,38 @@ var configSort = (options = {}) => {
913
939
  "yml/sort-keys": [
914
940
  "error",
915
941
  {
916
- pathPattern: ".*",
917
- order: { type: "asc" }
942
+ order: { type: "asc" },
943
+ pathPattern: ".*"
944
+ }
945
+ ]
946
+ }
947
+ });
948
+ }
949
+ if (additionalJsonFiles.length) {
950
+ configs2.push({
951
+ name: "ntnyq/sort/additional-json",
952
+ files: additionalJsonFiles,
953
+ rules: {
954
+ "jsonc/sort-keys": [
955
+ "error",
956
+ {
957
+ order: { type: "asc" },
958
+ pathPattern: ".*"
959
+ }
960
+ ]
961
+ }
962
+ });
963
+ }
964
+ if (additionalYamlFiles.length) {
965
+ configs2.push({
966
+ name: "ntnyq/sort/additional-yaml",
967
+ files: additionalYamlFiles,
968
+ rules: {
969
+ "yml/sort-keys": [
970
+ "error",
971
+ {
972
+ order: { type: "asc" },
973
+ pathPattern: ".*"
918
974
  }
919
975
  ]
920
976
  }
@@ -928,32 +984,32 @@ var configToml = (options = {}) => [
928
984
  {
929
985
  name: "ntnyq/toml",
930
986
  files: [GLOB_TOML],
931
- languageOptions: {
932
- parser: parserToml
933
- },
934
987
  plugins: {
935
988
  toml: default6
936
989
  },
990
+ languageOptions: {
991
+ parser: parserToml
992
+ },
937
993
  rules: {
938
- "toml/keys-order": "error",
939
- "toml/key-spacing": "error",
940
- "toml/quoted-keys": "error",
941
- "toml/comma-style": "error",
942
- "toml/tables-order": "error",
943
- "toml/no-space-dots": "error",
944
- "toml/spaced-comment": "error",
945
- "toml/precision-of-integer": "error",
946
- "toml/table-bracket-spacing": "error",
947
994
  "toml/array-bracket-newline": "error",
995
+ "toml/array-bracket-spacing": ["error", "never"],
996
+ "toml/array-element-newline": ["error", "never"],
997
+ "toml/comma-style": "error",
998
+ "toml/indent": ["error", 2],
948
999
  "toml/inline-table-curly-spacing": "error",
1000
+ "toml/key-spacing": "error",
1001
+ "toml/keys-order": "error",
1002
+ "toml/no-space-dots": "error",
1003
+ "toml/no-unreadable-number-separator": "error",
949
1004
  "toml/padding-line-between-pairs": "error",
950
1005
  "toml/padding-line-between-tables": "error",
951
- "toml/no-unreadable-number-separator": "error",
952
1006
  "toml/precision-of-fractional-seconds": "error",
1007
+ "toml/precision-of-integer": "error",
1008
+ "toml/quoted-keys": "error",
1009
+ "toml/spaced-comment": "error",
1010
+ "toml/table-bracket-spacing": "error",
1011
+ "toml/tables-order": "error",
953
1012
  "toml/vue-custom-block/no-parsing-error": "error",
954
- "toml/indent": ["error", 2],
955
- "toml/array-bracket-spacing": ["error", "never"],
956
- "toml/array-element-newline": ["error", "never"],
957
1013
  // Overrides rules
958
1014
  ...options.overrides
959
1015
  }
@@ -1081,8 +1137,8 @@ var configTest = (options = {}) => {
1081
1137
  name: "ntnyq/test/base",
1082
1138
  files,
1083
1139
  rules: {
1084
- "no-unused-expressions": "off",
1085
1140
  "max-lines-per-function": "off",
1141
+ "no-unused-expressions": "off",
1086
1142
  "no-only-tests/no-only-tests": "error",
1087
1143
  // Overrides rules
1088
1144
  ...options.overrides
@@ -1133,8 +1189,8 @@ var configAntfu = (options = {}) => [
1133
1189
  // required `object-curly-newline` to be disabled
1134
1190
  // 'antfu/consistent-list-newline': 'error',
1135
1191
  "antfu/import-dedupe": "error",
1136
- "antfu/no-import-dist": "error",
1137
1192
  "antfu/indent-unindent": "error",
1193
+ "antfu/no-import-dist": "error",
1138
1194
  "antfu/no-import-node-modules-by-path": "error",
1139
1195
  // Overrides rules
1140
1196
  ...options.overrides
@@ -1169,34 +1225,19 @@ var configJsdoc = (options = {}) => [
1169
1225
  // Use `jsdoc/sort-tags`
1170
1226
  "jsdoc/text-escaping": "off",
1171
1227
  // No need
1172
- // Fixable rules
1173
- "jsdoc/empty-tags": "error",
1174
- "jsdoc/no-defaults": "error",
1175
- "jsdoc/check-types": "error",
1176
- "jsdoc/no-blank-blocks": "error",
1228
+ "jsdoc/check-access": "warn",
1229
+ "jsdoc/implements-on-classes": "warn",
1230
+ "jsdoc/require-param-name": "warn",
1231
+ "jsdoc/require-property": "warn",
1232
+ "jsdoc/require-property-description": "warn",
1233
+ "jsdoc/require-property-name": "warn",
1234
+ "jsdoc/require-returns-check": "warn",
1235
+ "jsdoc/require-returns-description": "warn",
1236
+ "jsdoc/require-yields-check": "warn",
1177
1237
  "jsdoc/check-alignment": "error",
1178
- "jsdoc/multiline-blocks": "error",
1179
- "jsdoc/check-param-names": "error",
1180
- "jsdoc/no-multi-asterisks": "error",
1181
1238
  "jsdoc/check-line-alignment": "error",
1239
+ "jsdoc/check-param-names": "error",
1182
1240
  "jsdoc/check-property-names": "error",
1183
- "jsdoc/require-asterisk-prefix": "error",
1184
- "jsdoc/no-blank-block-descriptions": "error",
1185
- "jsdoc/require-hyphen-before-param-description": "error",
1186
- "jsdoc/no-bad-blocks": [
1187
- "error",
1188
- {
1189
- ignore: [
1190
- // built-in default
1191
- "ts-check",
1192
- "ts-expect-error",
1193
- "ts-ignore",
1194
- "ts-nocheck",
1195
- // useful
1196
- "vite-ignore"
1197
- ]
1198
- }
1199
- ],
1200
1241
  "jsdoc/check-tag-names": [
1201
1242
  "error",
1202
1243
  {
@@ -1217,15 +1258,30 @@ var configJsdoc = (options = {}) => [
1217
1258
  ]
1218
1259
  }
1219
1260
  ],
1220
- "jsdoc/check-access": "warn",
1221
- "jsdoc/implements-on-classes": "warn",
1222
- "jsdoc/require-param-name": "warn",
1223
- "jsdoc/require-property": "warn",
1224
- "jsdoc/require-property-name": "warn",
1225
- "jsdoc/require-property-description": "warn",
1226
- "jsdoc/require-returns-check": "warn",
1227
- "jsdoc/require-returns-description": "warn",
1228
- "jsdoc/require-yields-check": "warn",
1261
+ "jsdoc/check-types": "error",
1262
+ // Fixable rules
1263
+ "jsdoc/empty-tags": "error",
1264
+ "jsdoc/multiline-blocks": "error",
1265
+ "jsdoc/no-bad-blocks": [
1266
+ "error",
1267
+ {
1268
+ ignore: [
1269
+ // built-in default
1270
+ "ts-check",
1271
+ "ts-expect-error",
1272
+ "ts-ignore",
1273
+ "ts-nocheck",
1274
+ // useful
1275
+ "vite-ignore"
1276
+ ]
1277
+ }
1278
+ ],
1279
+ "jsdoc/no-blank-block-descriptions": "error",
1280
+ "jsdoc/no-blank-blocks": "error",
1281
+ "jsdoc/no-defaults": "error",
1282
+ "jsdoc/no-multi-asterisks": "error",
1283
+ "jsdoc/require-asterisk-prefix": "error",
1284
+ "jsdoc/require-hyphen-before-param-description": "error",
1229
1285
  // TypeScript rules overrides
1230
1286
  ...options.typescript ? typescriptRules : javscriptRules,
1231
1287
  // Overrides rules
@@ -1247,26 +1303,26 @@ var configJsonc = (options = {}) => [
1247
1303
  },
1248
1304
  rules: {
1249
1305
  ...default11.configs["recommended-with-jsonc"].rules,
1250
- "jsonc/no-octal-escape": "error",
1251
- "jsonc/indent": ["error", 2],
1252
- "jsonc/comma-style": ["error", "last"],
1253
- "jsonc/comma-dangle": ["error", "never"],
1254
- "jsonc/object-curly-spacing": ["error", "always"],
1255
1306
  "jsonc/array-bracket-spacing": ["error", "never"],
1307
+ "jsonc/comma-dangle": ["error", "never"],
1308
+ "jsonc/comma-style": ["error", "last"],
1309
+ "jsonc/indent": ["error", 2],
1256
1310
  "jsonc/key-spacing": [
1257
1311
  "error",
1258
1312
  {
1259
- beforeColon: false,
1260
- afterColon: true
1313
+ afterColon: true,
1314
+ beforeColon: false
1261
1315
  }
1262
1316
  ],
1317
+ "jsonc/no-octal-escape": "error",
1263
1318
  "jsonc/object-curly-newline": [
1264
1319
  "error",
1265
1320
  {
1266
- multiline: true,
1267
- consistent: true
1321
+ consistent: true,
1322
+ multiline: true
1268
1323
  }
1269
1324
  ],
1325
+ "jsonc/object-curly-spacing": ["error", "always"],
1270
1326
  "jsonc/object-property-newline": [
1271
1327
  "error",
1272
1328
  {
@@ -1290,12 +1346,11 @@ var configPinia = (options = {}) => {
1290
1346
  pinia: default7
1291
1347
  },
1292
1348
  rules: {
1293
- "pinia/prefer-single-store-per-file": "error",
1349
+ "pinia/never-export-initialized-store": "error",
1294
1350
  "pinia/no-duplicate-store-ids": "error",
1295
1351
  "pinia/no-return-global-properties": "error",
1296
1352
  "pinia/no-store-to-refs-in-store": "error",
1297
- "pinia/never-export-initialized-store": "error",
1298
- "pinia/require-setup-store-properties-export": "error",
1353
+ "pinia/prefer-single-store-per-file": "error",
1299
1354
  "pinia/prefer-use-store-naming-convention": [
1300
1355
  "error",
1301
1356
  {
@@ -1303,6 +1358,7 @@ var configPinia = (options = {}) => {
1303
1358
  storeSuffix: "Store"
1304
1359
  }
1305
1360
  ],
1361
+ "pinia/require-setup-store-properties-export": "error",
1306
1362
  // Overrides rules
1307
1363
  ...options.overrides
1308
1364
  }
@@ -1400,8 +1456,8 @@ var configUnoCSS = (options = {}) => [
1400
1456
  unocss: default13
1401
1457
  },
1402
1458
  rules: {
1403
- "unocss/order": "error",
1404
1459
  "unocss/order-attributify": options.attributify ? "error" : "off",
1460
+ "unocss/order": "error",
1405
1461
  // Overrides rules
1406
1462
  ...options.overrides
1407
1463
  }
@@ -1610,9 +1666,9 @@ var configIgnores = (customIgnores = []) => [
1610
1666
  // src/configs/importX.ts
1611
1667
  var configImportX = (options = {}) => {
1612
1668
  const {
1613
- typescript: enableTypeScript,
1614
1669
  // use typescript resolve if possible
1615
- preferTypeScriptResolver = true
1670
+ preferTypeScriptResolver = true,
1671
+ typescript: enableTypeScript
1616
1672
  } = options;
1617
1673
  return [
1618
1674
  {
@@ -1638,22 +1694,22 @@ var configImportX = (options = {}) => {
1638
1694
  ]
1639
1695
  },
1640
1696
  rules: {
1641
- "import-x/no-unresolved": "off",
1642
1697
  "import-x/no-absolute-path": "off",
1643
1698
  "import-x/no-named-as-default-member": "off",
1644
1699
  "import-x/no-named-default": "off",
1700
+ "import-x/no-unresolved": "off",
1645
1701
  // disabled in favor or `perfectionist/sort-imports`
1646
1702
  "import-x/order": "off",
1647
- "import-x/first": "error",
1648
- "import-x/export": "error",
1649
- "import-x/no-self-import": "error",
1650
- "import-x/no-duplicates": "error",
1651
- "import-x/no-mutable-exports": "error",
1652
- "import-x/newline-after-import": "error",
1653
1703
  "import-x/consistent-type-specifier-style": [
1654
1704
  "error",
1655
1705
  "prefer-top-level"
1656
1706
  ],
1707
+ "import-x/export": "error",
1708
+ "import-x/first": "error",
1709
+ "import-x/newline-after-import": "error",
1710
+ "import-x/no-duplicates": "error",
1711
+ "import-x/no-mutable-exports": "error",
1712
+ "import-x/no-self-import": "error",
1657
1713
  // Overrides rules
1658
1714
  ...options.overrides
1659
1715
  }
@@ -1665,12 +1721,12 @@ var configImportX = (options = {}) => {
1665
1721
  var disabledRules2 = {
1666
1722
  "unicorn/better-regex": "off",
1667
1723
  "unicorn/explicit-length-check": "off",
1668
- "unicorn/prefer-top-level-await": "off",
1669
1724
  "unicorn/no-array-callback-reference": "off",
1670
1725
  /**
1671
1726
  * @see https://caniuse.com/?search=globalThis
1672
1727
  */
1673
- "unicorn/prefer-global-this": "off"
1728
+ "unicorn/prefer-global-this": "off",
1729
+ "unicorn/prefer-top-level-await": "off"
1674
1730
  };
1675
1731
  var configUnicorn = (options = {}) => [
1676
1732
  {
@@ -1679,70 +1735,78 @@ var configUnicorn = (options = {}) => [
1679
1735
  unicorn: default15
1680
1736
  },
1681
1737
  rules: {
1738
+ "unicorn/catch-error-name": [
1739
+ "error",
1740
+ {
1741
+ name: "err",
1742
+ ignore: ["^_."]
1743
+ }
1744
+ ],
1745
+ "unicorn/consistent-existence-index-check": "error",
1746
+ "unicorn/custom-error-definition": "error",
1747
+ "unicorn/error-message": "error",
1682
1748
  "unicorn/escape-case": "error",
1749
+ "unicorn/new-for-builtins": "error",
1750
+ "unicorn/no-console-spaces": "error",
1683
1751
  "unicorn/no-for-loop": "error",
1752
+ "unicorn/no-hex-escape": "error",
1684
1753
  "unicorn/no-lonely-if": "error",
1685
- "unicorn/error-message": "error",
1686
1754
  "unicorn/no-new-buffer": "error",
1687
- "unicorn/no-hex-escape": "error",
1688
- "unicorn/throw-new-error": "error",
1689
- "unicorn/prefer-includes": "error",
1690
- "unicorn/new-for-builtins": "error",
1691
- "unicorn/prefer-type-error": "error",
1692
- "unicorn/prefer-math-trunc": "error",
1693
- "unicorn/no-console-spaces": "error",
1755
+ "unicorn/no-static-only-class": "error",
1756
+ "unicorn/no-typeof-undefined": "error",
1757
+ "unicorn/no-unnecessary-await": "error",
1694
1758
  "unicorn/no-zero-fractions": "error",
1695
- "unicorn/prefer-regexp-test": "error",
1696
1759
  "unicorn/number-literal-case": "error",
1697
- "unicorn/no-typeof-undefined": "error",
1760
+ "unicorn/prefer-date-now": "error",
1761
+ "unicorn/prefer-includes": "error",
1762
+ "unicorn/prefer-keyboard-event-key": "error",
1698
1763
  "unicorn/prefer-math-min-max": "error",
1699
- "unicorn/prefer-node-protocol": "error",
1700
- "unicorn/no-unnecessary-await": "error",
1701
- "unicorn/no-static-only-class": "error",
1702
- "unicorn/prefer-reflect-apply": "error",
1703
- "unicorn/prefer-negative-index": "error",
1704
- "unicorn/prefer-structured-clone": "error",
1705
- "unicorn/custom-error-definition": "error",
1764
+ "unicorn/prefer-math-trunc": "error",
1706
1765
  "unicorn/prefer-modern-math-apis": "error",
1766
+ "unicorn/prefer-negative-index": "error",
1767
+ "unicorn/prefer-node-protocol": "error",
1707
1768
  "unicorn/prefer-number-properties": "error",
1708
- "unicorn/prefer-prototype-methods": "error",
1709
- "unicorn/prefer-keyboard-event-key": "error",
1710
1769
  "unicorn/prefer-optional-catch-binding": "error",
1711
- "unicorn/consistent-existence-index-check": "error",
1770
+ "unicorn/prefer-prototype-methods": "error",
1771
+ "unicorn/prefer-reflect-apply": "error",
1772
+ "unicorn/prefer-regexp-test": "error",
1773
+ "unicorn/prefer-structured-clone": "error",
1774
+ "unicorn/prefer-type-error": "error",
1712
1775
  "unicorn/switch-case-braces": ["error", "avoid"],
1713
- "unicorn/catch-error-name": [
1714
- "error",
1715
- {
1716
- name: "err",
1717
- ignore: ["^_."]
1718
- }
1719
- ],
1720
- "unicorn/prefer-date-now": "error",
1721
- // String
1776
+ "unicorn/throw-new-error": "error",
1777
+ /**
1778
+ * @pg String
1779
+ */
1722
1780
  "unicorn/prefer-code-point": "error",
1723
1781
  "unicorn/prefer-string-slice": "error",
1724
- "unicorn/prefer-string-trim-start-end": "error",
1725
1782
  "unicorn/prefer-string-starts-ends-with": "error",
1726
- // DOM
1727
- "unicorn/prefer-query-selector": "error",
1728
- "unicorn/prefer-modern-dom-apis": "error",
1729
- "unicorn/prefer-dom-node-remove": "error",
1783
+ "unicorn/prefer-string-trim-start-end": "error",
1784
+ /**
1785
+ * @pg DOM
1786
+ */
1787
+ "unicorn/no-invalid-remove-event-listener": "error",
1788
+ "unicorn/prefer-add-event-listener": "error",
1730
1789
  "unicorn/prefer-dom-node-append": "error",
1731
1790
  "unicorn/prefer-dom-node-dataset": "error",
1732
- "unicorn/prefer-add-event-listener": "error",
1791
+ "unicorn/prefer-dom-node-remove": "error",
1733
1792
  "unicorn/prefer-dom-node-text-content": "error",
1734
- "unicorn/no-invalid-remove-event-listener": "error",
1735
- // Array
1736
- "unicorn/no-new-array": "error",
1793
+ "unicorn/prefer-modern-dom-apis": "error",
1794
+ "unicorn/prefer-query-selector": "error",
1795
+ /**
1796
+ * @pg Array
1797
+ */
1798
+ "unicorn/no-array-method-this-argument": "error",
1737
1799
  "unicorn/no-array-push-push": "error",
1738
- "unicorn/prefer-array-find": "error",
1739
- "unicorn/prefer-array-some": "error",
1740
1800
  "unicorn/no-instanceof-array": "error",
1801
+ "unicorn/no-new-array": "error",
1802
+ "unicorn/prefer-array-find": "error",
1741
1803
  "unicorn/prefer-array-flat-map": "error",
1742
1804
  "unicorn/prefer-array-index-of": "error",
1805
+ "unicorn/prefer-array-some": "error",
1743
1806
  "unicorn/require-array-join-separator": "error",
1744
- "unicorn/no-array-method-this-argument": "error",
1745
- // Set
1807
+ /**
1808
+ * @pg Set
1809
+ */
1746
1810
  "unicorn/prefer-set-has": "error",
1747
1811
  "unicorn/prefer-set-size": "error",
1748
1812
  ...disabledRules2,
@@ -1764,8 +1828,8 @@ var configSpecials = (options = {}) => {
1764
1828
  name: "ntnyq/specials/scripts",
1765
1829
  files: [`**/scripts/${GLOB_SRC}`],
1766
1830
  rules: {
1767
- "no-console": "off",
1768
1831
  "@typescript-eslint/explicit-function-return-type": "off",
1832
+ "no-console": "off",
1769
1833
  // Overrides rules
1770
1834
  ...options.overridesScriptsRules
1771
1835
  }
@@ -1774,8 +1838,8 @@ var configSpecials = (options = {}) => {
1774
1838
  name: "ntnyq/specials/cli",
1775
1839
  files: [`**/cli/${GLOB_SRC}`, `**/cli.${GLOB_SRC_EXT}`],
1776
1840
  rules: {
1777
- "no-console": "off",
1778
1841
  "@typescript-eslint/explicit-function-return-type": "off",
1842
+ "no-console": "off",
1779
1843
  // Overrides rules
1780
1844
  ...options.overridesCliRules
1781
1845
  }
@@ -1807,16 +1871,24 @@ var configSpecials = (options = {}) => {
1807
1871
  perfectionist: default20
1808
1872
  },
1809
1873
  rules: {
1810
- "no-console": "off",
1811
- "import-x/no-default-export": "off",
1812
1874
  "@typescript-eslint/explicit-function-return-type": "off",
1875
+ "import-x/no-default-export": "off",
1876
+ "no-console": "off",
1813
1877
  "perfectionist/sort-objects": [
1814
1878
  "error",
1815
1879
  {
1816
- type: "alphabetical",
1880
+ ignoreCase: true,
1881
+ newlinesBetween: "ignore",
1817
1882
  order: "asc",
1818
1883
  partitionByComment: true,
1819
- groups: ["unknown", "method", "multiline"]
1884
+ type: "alphabetical",
1885
+ groups: [
1886
+ "property",
1887
+ "multiline-property",
1888
+ "method",
1889
+ "multiline-method",
1890
+ "unknown"
1891
+ ]
1820
1892
  }
1821
1893
  ],
1822
1894
  ...options.overridesConfigFileRules
@@ -1832,10 +1904,10 @@ var configSpecials = (options = {}) => {
1832
1904
  "**/components/ui/**/*.vue"
1833
1905
  ],
1834
1906
  rules: {
1835
- "vue/define-emits-declaration": "off",
1836
- "import-x/consistent-type-specifier-style": "off",
1837
- "@typescript-eslint/no-unused-vars": "off",
1838
1907
  "@typescript-eslint/consistent-type-imports": "off",
1908
+ "@typescript-eslint/no-unused-vars": "off",
1909
+ "import-x/consistent-type-specifier-style": "off",
1910
+ "vue/define-emits-declaration": "off",
1839
1911
  // Overrides rules
1840
1912
  ...shadcnOptions.overridesRules
1841
1913
  }
@@ -1896,35 +1968,35 @@ var configMarkdown = (options = {}) => {
1896
1968
  ],
1897
1969
  languageOptions: {
1898
1970
  parserOptions: {
1899
- ecmaFeatures: {
1900
- impliedStrict: true
1901
- },
1902
1971
  // type-aware lint related parserOptions
1903
1972
  project: false,
1904
- projectService: false
1973
+ projectService: false,
1974
+ ecmaFeatures: {
1975
+ impliedStrict: true
1976
+ }
1905
1977
  }
1906
1978
  },
1907
1979
  rules: {
1908
- "no-undef": "off",
1980
+ "@typescript-eslint/comma-dangle": "off",
1981
+ "@typescript-eslint/consistent-type-imports": "off",
1982
+ "@typescript-eslint/no-extraneous-class": "off",
1983
+ "@typescript-eslint/no-namespace": "off",
1984
+ "@typescript-eslint/no-redeclare": "off",
1985
+ "@typescript-eslint/no-require-imports": "off",
1986
+ "@typescript-eslint/no-unused-expressions": "off",
1987
+ "@typescript-eslint/no-unused-vars": "off",
1988
+ "@typescript-eslint/no-use-before-define": "off",
1989
+ "import-x/no-unresolved": "off",
1909
1990
  "no-alert": "off",
1910
1991
  "no-console": "off",
1911
- "no-unused-vars": "off",
1912
- "no-unused-expressions": "off",
1913
1992
  "no-restricted-imports": "off",
1993
+ "no-undef": "off",
1994
+ "no-unused-expressions": "off",
1995
+ "no-unused-vars": "off",
1914
1996
  "node/prefer-global/buffer": "off",
1915
1997
  "node/prefer-global/process": "off",
1916
- "import-x/no-unresolved": "off",
1917
1998
  "unused-imports/no-unused-imports": "off",
1918
1999
  "unused-imports/no-unused-vars": "off",
1919
- "@typescript-eslint/comma-dangle": "off",
1920
- "@typescript-eslint/no-redeclare": "off",
1921
- "@typescript-eslint/no-namespace": "off",
1922
- "@typescript-eslint/no-unused-vars": "off",
1923
- "@typescript-eslint/no-require-imports": "off",
1924
- "@typescript-eslint/no-extraneous-class": "off",
1925
- "@typescript-eslint/no-use-before-define": "off",
1926
- "@typescript-eslint/no-unused-expressions": "off",
1927
- "@typescript-eslint/consistent-type-imports": "off",
1928
2000
  // disable all type-aware rules of @typescript-eslint
1929
2001
  ...configs.disableTypeChecked.rules,
1930
2002
  // Overrides rules
@@ -2025,25 +2097,25 @@ import jsConfig from "@eslint/js";
2025
2097
  import globals2 from "globals";
2026
2098
  var strictRules = {
2027
2099
  complexity: ["error", { max: 30 }],
2028
- "max-params": ["error", { max: 5 }],
2029
2100
  "max-depth": ["error", { max: 5 }],
2030
- "max-nested-callbacks": ["error", { max: 10 }],
2031
2101
  "max-lines": [
2032
2102
  "error",
2033
2103
  {
2034
2104
  max: 1e3,
2035
- skipComments: true,
2036
- skipBlankLines: true
2105
+ skipBlankLines: true,
2106
+ skipComments: true
2037
2107
  }
2038
2108
  ],
2039
2109
  "max-lines-per-function": [
2040
2110
  "error",
2041
2111
  {
2042
2112
  max: 200,
2043
- skipComments: true,
2044
- skipBlankLines: true
2113
+ skipBlankLines: true,
2114
+ skipComments: true
2045
2115
  }
2046
- ]
2116
+ ],
2117
+ "max-nested-callbacks": ["error", { max: 10 }],
2118
+ "max-params": ["error", { max: 5 }]
2047
2119
  };
2048
2120
  var configJavaScript = (options = {}) => [
2049
2121
  {
@@ -2053,44 +2125,50 @@ var configJavaScript = (options = {}) => [
2053
2125
  {
2054
2126
  name: "ntnyq/js/core",
2055
2127
  languageOptions: {
2128
+ sourceType: "module",
2056
2129
  globals: {
2057
2130
  ...globals2.browser,
2058
2131
  ...globals2.es2021,
2059
2132
  ...globals2.node
2060
- },
2061
- sourceType: "module"
2133
+ }
2062
2134
  },
2063
2135
  rules: {
2064
- "require-await": "off",
2136
+ "consistent-return": "off",
2065
2137
  "no-return-assign": "off",
2066
2138
  "no-useless-escape": "off",
2067
- "consistent-return": "off",
2139
+ "require-await": "off",
2068
2140
  // disabled in favor of `perfectionist/sort-named-imports`
2069
2141
  "sort-imports": "off",
2070
2142
  // standard v17.0.0
2071
2143
  "accessor-pairs": [
2072
2144
  "error",
2073
- { setWithoutGet: true, enforceForClassMembers: true }
2145
+ { enforceForClassMembers: true, setWithoutGet: true }
2074
2146
  ],
2147
+ "array-callback-return": "error",
2148
+ "block-scoped-var": "error",
2075
2149
  camelcase: [
2076
2150
  "error",
2077
2151
  {
2078
2152
  allow: ["^UNSAFE_"],
2079
- properties: "never",
2080
- ignoreGlobals: true
2153
+ ignoreGlobals: true,
2154
+ properties: "never"
2081
2155
  }
2082
2156
  ],
2083
2157
  "constructor-super": "error",
2084
2158
  curly: ["error", "multi-line"],
2085
2159
  "default-case-last": "error",
2086
2160
  "dot-notation": ["error", { allowKeywords: true }],
2161
+ // best-practice
2162
+ eqeqeq: ["error", "smart"],
2087
2163
  "new-cap": [
2088
2164
  "error",
2089
- { newIsCap: true, capIsNew: false, properties: true }
2165
+ { capIsNew: false, newIsCap: true, properties: true }
2090
2166
  ],
2167
+ "no-alert": "error",
2091
2168
  "no-array-constructor": "error",
2092
2169
  "no-async-promise-executor": "error",
2093
2170
  "no-caller": "error",
2171
+ "no-case-declarations": "error",
2094
2172
  "no-class-assign": "error",
2095
2173
  "no-compare-neg-zero": "error",
2096
2174
  "no-cond-assign": "error",
@@ -2103,10 +2181,10 @@ var configJavaScript = (options = {}) => [
2103
2181
  "no-dupe-class-members": "error",
2104
2182
  "no-dupe-keys": "error",
2105
2183
  "no-duplicate-case": "error",
2106
- "no-useless-backreference": "error",
2107
2184
  "no-empty": ["error", { allowEmptyCatch: true }],
2108
2185
  "no-empty-character-class": "error",
2109
2186
  "no-empty-pattern": "error",
2187
+ "no-empty-static-block": "error",
2110
2188
  "no-eval": "error",
2111
2189
  "no-ex-assign": "error",
2112
2190
  "no-extend-native": "error",
@@ -2124,15 +2202,16 @@ var configJavaScript = (options = {}) => [
2124
2202
  "no-lone-blocks": "error",
2125
2203
  "no-loss-of-precision": "error",
2126
2204
  "no-misleading-character-class": "error",
2127
- "no-prototype-builtins": "error",
2128
- "no-useless-catch": "error",
2205
+ "no-multi-str": "error",
2129
2206
  "no-new": "error",
2130
2207
  "no-new-func": "error",
2208
+ "no-new-native-nonconstructor": "error",
2131
2209
  "no-new-wrappers": "error",
2132
2210
  "no-obj-calls": "error",
2133
2211
  "no-octal": "error",
2134
2212
  "no-octal-escape": "error",
2135
2213
  "no-proto": "error",
2214
+ "no-prototype-builtins": "error",
2136
2215
  "no-redeclare": ["error", { builtinGlobals: false }],
2137
2216
  "no-regex-spaces": "error",
2138
2217
  "no-self-assign": ["error", { props: true }],
@@ -2156,8 +2235,8 @@ var configJavaScript = (options = {}) => [
2156
2235
  "error",
2157
2236
  {
2158
2237
  allowShortCircuit: true,
2159
- allowTernary: true,
2160
- allowTaggedTemplates: true
2238
+ allowTaggedTemplates: true,
2239
+ allowTernary: true
2161
2240
  }
2162
2241
  ],
2163
2242
  "no-unused-vars": [
@@ -2169,38 +2248,35 @@ var configJavaScript = (options = {}) => [
2169
2248
  vars: "all"
2170
2249
  }
2171
2250
  ],
2251
+ "no-use-before-define": [
2252
+ "error",
2253
+ {
2254
+ allowNamedExports: false,
2255
+ classes: false,
2256
+ functions: false,
2257
+ variables: true
2258
+ }
2259
+ ],
2260
+ "no-useless-backreference": "error",
2172
2261
  "no-useless-call": "error",
2262
+ "no-useless-catch": "error",
2173
2263
  "no-useless-computed-key": "error",
2174
2264
  "no-useless-constructor": "error",
2175
2265
  "no-useless-rename": "error",
2176
2266
  "no-useless-return": "error",
2177
- "prefer-promise-reject-errors": "error",
2178
- "prefer-regex-literals": ["error", { disallowRedundantWrapping: true }],
2179
- "symbol-description": "error",
2180
- "unicode-bom": ["error", "never"],
2181
- "use-isnan": [
2182
- "error",
2183
- {
2184
- enforceForSwitchCase: true,
2185
- enforceForIndexOf: true
2186
- }
2187
- ],
2188
- "valid-typeof": ["error", { requireStringLiterals: true }],
2189
- yoda: ["error", "never"],
2190
2267
  // es6+
2191
2268
  "no-var": "error",
2192
- "prefer-rest-params": "error",
2193
- "prefer-spread": "error",
2194
- "prefer-template": "error",
2195
- "no-empty-static-block": "error",
2196
- "no-new-native-nonconstructor": "error",
2197
- "prefer-const": [
2269
+ "no-void": "error",
2270
+ "no-with": "error",
2271
+ "object-shorthand": [
2198
2272
  "error",
2273
+ "always",
2199
2274
  {
2200
- destructuring: "all",
2201
- ignoreReadBeforeAssign: true
2275
+ avoidQuotes: true,
2276
+ ignoreConstructors: false
2202
2277
  }
2203
2278
  ],
2279
+ "one-var": ["error", "never"],
2204
2280
  "prefer-arrow-callback": [
2205
2281
  "error",
2206
2282
  {
@@ -2208,34 +2284,30 @@ var configJavaScript = (options = {}) => [
2208
2284
  allowUnboundThis: true
2209
2285
  }
2210
2286
  ],
2211
- "object-shorthand": [
2287
+ "prefer-const": [
2212
2288
  "error",
2213
- "always",
2214
2289
  {
2215
- ignoreConstructors: false,
2216
- avoidQuotes: true
2290
+ destructuring: "all",
2291
+ ignoreReadBeforeAssign: true
2217
2292
  }
2218
2293
  ],
2219
- // best-practice
2220
- eqeqeq: ["error", "smart"],
2221
- "array-callback-return": "error",
2222
- "block-scoped-var": "error",
2223
- "no-alert": "error",
2224
- "no-case-declarations": "error",
2225
- "no-multi-str": "error",
2226
- "no-with": "error",
2227
- "no-void": "error",
2228
- "vars-on-top": "error",
2229
- "one-var": ["error", "never"],
2230
- "no-use-before-define": [
2294
+ "prefer-promise-reject-errors": "error",
2295
+ "prefer-regex-literals": ["error", { disallowRedundantWrapping: true }],
2296
+ "prefer-rest-params": "error",
2297
+ "prefer-spread": "error",
2298
+ "prefer-template": "error",
2299
+ "symbol-description": "error",
2300
+ "unicode-bom": ["error", "never"],
2301
+ "use-isnan": [
2231
2302
  "error",
2232
2303
  {
2233
- functions: false,
2234
- classes: false,
2235
- variables: true,
2236
- allowNamedExports: false
2304
+ enforceForIndexOf: true,
2305
+ enforceForSwitchCase: true
2237
2306
  }
2238
2307
  ],
2308
+ "valid-typeof": ["error", { requireStringLiterals: true }],
2309
+ "vars-on-top": "error",
2310
+ yoda: ["error", "never"],
2239
2311
  // Strict rules
2240
2312
  ...options.strict ? strictRules : {},
2241
2313
  // Overrides rules
@@ -2260,36 +2332,36 @@ var configJSX = () => [
2260
2332
  // src/configs/typescript.ts
2261
2333
  import process4 from "node:process";
2262
2334
  var typeAwareRules = {
2335
+ // too strict
2336
+ "@typescript-eslint/strict-boolean-expressions": "off",
2263
2337
  "dot-notation": "off",
2264
- "require-await": "off",
2265
2338
  "no-implied-eval": "off",
2266
2339
  "no-throw-literal": "off",
2267
- // too strict
2268
- "@typescript-eslint/strict-boolean-expressions": "off",
2269
- "@typescript-eslint/require-await": "error",
2270
- "@typescript-eslint/unbound-method": "error",
2271
- "@typescript-eslint/no-unsafe-call": "error",
2340
+ "require-await": "off",
2272
2341
  "@typescript-eslint/await-thenable": "error",
2342
+ "@typescript-eslint/dot-notation": ["error", { allowKeywords: true }],
2343
+ "@typescript-eslint/no-duplicate-type-constituents": "error",
2344
+ "@typescript-eslint/no-floating-promises": "error",
2273
2345
  "@typescript-eslint/no-for-in-array": "error",
2274
2346
  "@typescript-eslint/no-implied-eval": "error",
2275
- "@typescript-eslint/only-throw-error": "error",
2276
- "@typescript-eslint/no-unsafe-return": "error",
2347
+ "@typescript-eslint/no-misused-promises": "error",
2277
2348
  "@typescript-eslint/no-misused-spread": "error",
2349
+ "@typescript-eslint/no-redundant-type-constituents": "error",
2350
+ "@typescript-eslint/no-unnecessary-type-assertion": "error",
2278
2351
  "@typescript-eslint/no-unsafe-argument": "error",
2279
- "@typescript-eslint/no-misused-promises": "error",
2280
2352
  "@typescript-eslint/no-unsafe-assignment": "error",
2281
- "@typescript-eslint/no-floating-promises": "error",
2353
+ "@typescript-eslint/no-unsafe-call": "error",
2354
+ "@typescript-eslint/no-unsafe-member-access": "error",
2355
+ "@typescript-eslint/no-unsafe-return": "error",
2356
+ "@typescript-eslint/only-throw-error": "error",
2282
2357
  "@typescript-eslint/promise-function-async": "error",
2358
+ "@typescript-eslint/require-await": "error",
2283
2359
  "@typescript-eslint/restrict-plus-operands": "error",
2284
- "@typescript-eslint/triple-slash-reference": "error",
2285
- "@typescript-eslint/no-unsafe-member-access": "error",
2286
- "@typescript-eslint/switch-exhaustiveness-check": "error",
2287
- "@typescript-eslint/no-unnecessary-type-assertion": "error",
2288
2360
  "@typescript-eslint/restrict-template-expressions": "error",
2289
- "@typescript-eslint/no-redundant-type-constituents": "error",
2290
- "@typescript-eslint/no-duplicate-type-constituents": "error",
2291
2361
  "@typescript-eslint/return-await": ["error", "in-try-catch"],
2292
- "@typescript-eslint/dot-notation": ["error", { allowKeywords: true }]
2362
+ "@typescript-eslint/switch-exhaustiveness-check": "error",
2363
+ "@typescript-eslint/triple-slash-reference": "error",
2364
+ "@typescript-eslint/unbound-method": "error"
2293
2365
  };
2294
2366
  var recommendedRules = configs.recommended.reduce(
2295
2367
  (rules, config) => {
@@ -2317,11 +2389,11 @@ var configTypeScript = (options = {}) => {
2317
2389
  extraFileExtensions: extensions.map((ext) => `.${ext}`),
2318
2390
  sourceType: "module",
2319
2391
  ...enableTypeAware ? {
2392
+ tsconfigRootDir: process4.cwd(),
2320
2393
  projectService: {
2321
2394
  allowDefaultProject: ["./*.js"],
2322
2395
  defaultProject: options.tsconfigPath
2323
- },
2324
- tsconfigRootDir: process4.cwd()
2396
+ }
2325
2397
  } : {},
2326
2398
  ...parserOptions
2327
2399
  };
@@ -2353,103 +2425,103 @@ var configTypeScript = (options = {}) => {
2353
2425
  files,
2354
2426
  rules: {
2355
2427
  ...recommendedRules,
2356
- "@typescript-eslint/no-namespace": "off",
2357
- "@typescript-eslint/no-explicit-any": "off",
2428
+ "@typescript-eslint/consistent-indexed-object-style": "off",
2429
+ "@typescript-eslint/explicit-function-return-type": "off",
2430
+ "@typescript-eslint/explicit-member-accessibility": "off",
2431
+ "@typescript-eslint/explicit-module-boundary-types": "off",
2358
2432
  "@typescript-eslint/naming-convention": "off",
2359
2433
  "@typescript-eslint/no-empty-function": "off",
2434
+ "@typescript-eslint/no-explicit-any": "off",
2435
+ "@typescript-eslint/no-namespace": "off",
2360
2436
  "@typescript-eslint/no-non-null-assertion": "off",
2361
2437
  "@typescript-eslint/triple-slash-reference": "off",
2362
- "@typescript-eslint/explicit-member-accessibility": "off",
2363
- "@typescript-eslint/explicit-function-return-type": "off",
2364
- "@typescript-eslint/explicit-module-boundary-types": "off",
2365
- "@typescript-eslint/consistent-indexed-object-style": "off",
2366
- "@typescript-eslint/prefer-as-const": "warn",
2438
+ "default-param-last": "off",
2367
2439
  // Disabled in favor of enhanced ts rules
2368
2440
  "no-redeclare": "off",
2369
2441
  "no-unused-vars": "off",
2370
- "default-param-last": "off",
2371
2442
  "no-use-before-define": "off",
2372
2443
  "no-useless-constructor": "off",
2373
- "@typescript-eslint/default-param-last": "error",
2374
- "@typescript-eslint/no-useless-constructor": "error",
2375
- "@typescript-eslint/no-redeclare": [
2444
+ "@typescript-eslint/prefer-as-const": "warn",
2445
+ "@typescript-eslint/ban-ts-comment": [
2376
2446
  "error",
2377
2447
  {
2378
- builtinGlobals: false,
2379
- ignoreDeclarationMerge: true
2448
+ minimumDescriptionLength: 1,
2449
+ "ts-check": false,
2450
+ "ts-expect-error": "allow-with-description",
2451
+ "ts-ignore": "allow-with-description",
2452
+ "ts-nocheck": "allow-with-description"
2380
2453
  }
2381
2454
  ],
2382
- "@typescript-eslint/no-use-before-define": [
2455
+ // Extra rules
2456
+ "@typescript-eslint/ban-tslint-comment": "error",
2457
+ "@typescript-eslint/consistent-generic-constructors": [
2383
2458
  "error",
2384
- {
2385
- functions: false,
2386
- classes: false,
2387
- variables: true,
2388
- allowNamedExports: false,
2389
- enums: true,
2390
- typedefs: false,
2391
- ignoreTypeReferences: false
2392
- }
2459
+ "constructor"
2393
2460
  ],
2394
- "@typescript-eslint/no-unused-vars": [
2461
+ "@typescript-eslint/consistent-type-assertions": [
2395
2462
  "error",
2396
2463
  {
2397
- // Args after the last used will be reported
2398
- args: "after-used",
2399
- argsIgnorePattern: "^_",
2400
- caughtErrors: "all",
2401
- caughtErrorsIgnorePattern: "^_",
2402
- destructuredArrayIgnorePattern: "^_",
2403
- varsIgnorePattern: "^_",
2404
- ignoreRestSiblings: true
2464
+ assertionStyle: "as",
2465
+ objectLiteralTypeAssertions: "allow-as-parameter"
2405
2466
  }
2406
2467
  ],
2407
- // Extra rules
2408
- "@typescript-eslint/ban-tslint-comment": "error",
2409
- "@typescript-eslint/consistent-generic-constructors": [
2468
+ "@typescript-eslint/consistent-type-imports": [
2410
2469
  "error",
2411
- "constructor"
2470
+ {
2471
+ disallowTypeAnnotations: false,
2472
+ fixStyle: "separate-type-imports",
2473
+ prefer: "type-imports"
2474
+ }
2412
2475
  ],
2413
- "@typescript-eslint/ban-ts-comment": [
2476
+ "@typescript-eslint/default-param-last": "error",
2477
+ "@typescript-eslint/no-empty-object-type": [
2414
2478
  "error",
2415
2479
  {
2416
- minimumDescriptionLength: 1,
2417
- "ts-check": false,
2418
- "ts-expect-error": "allow-with-description",
2419
- "ts-ignore": "allow-with-description",
2420
- "ts-nocheck": "allow-with-description"
2480
+ allowInterfaces: "always",
2481
+ allowObjectTypes: "always"
2421
2482
  }
2422
2483
  ],
2423
- "@typescript-eslint/no-unused-expressions": [
2484
+ "@typescript-eslint/no-redeclare": [
2424
2485
  "error",
2425
2486
  {
2426
- allowShortCircuit: true,
2427
- allowTernary: true,
2428
- allowTaggedTemplates: true
2487
+ builtinGlobals: false,
2488
+ ignoreDeclarationMerge: true
2429
2489
  }
2430
2490
  ],
2431
- "@typescript-eslint/consistent-type-imports": [
2491
+ "@typescript-eslint/no-unused-expressions": [
2432
2492
  "error",
2433
2493
  {
2434
- prefer: "type-imports",
2435
- fixStyle: "separate-type-imports",
2436
- disallowTypeAnnotations: false
2494
+ allowShortCircuit: true,
2495
+ allowTaggedTemplates: true,
2496
+ allowTernary: true
2437
2497
  }
2438
2498
  ],
2439
- "@typescript-eslint/no-empty-object-type": [
2499
+ "@typescript-eslint/no-unused-vars": [
2440
2500
  "error",
2441
2501
  {
2442
- allowInterfaces: "always",
2443
- allowObjectTypes: "always"
2502
+ // Args after the last used will be reported
2503
+ args: "after-used",
2504
+ argsIgnorePattern: "^_",
2505
+ caughtErrors: "all",
2506
+ caughtErrorsIgnorePattern: "^_",
2507
+ destructuredArrayIgnorePattern: "^_",
2508
+ ignoreRestSiblings: true,
2509
+ varsIgnorePattern: "^_"
2444
2510
  }
2445
2511
  ],
2446
- "@typescript-eslint/consistent-type-assertions": [
2512
+ "@typescript-eslint/no-use-before-define": [
2447
2513
  "error",
2448
2514
  {
2449
- assertionStyle: "as",
2450
- objectLiteralTypeAssertions: "allow-as-parameter"
2515
+ allowNamedExports: false,
2516
+ classes: false,
2517
+ enums: true,
2518
+ functions: false,
2519
+ ignoreTypeReferences: false,
2520
+ typedefs: false,
2521
+ variables: true
2451
2522
  }
2452
2523
  ],
2524
+ "@typescript-eslint/no-useless-constructor": "error",
2453
2525
  // Overrides rules
2454
2526
  ...options.overrides
2455
2527
  }
@@ -2470,11 +2542,11 @@ var configTypeScript = (options = {}) => {
2470
2542
  name: "ntnyq/ts/types",
2471
2543
  files: [...GLOB_TYPES],
2472
2544
  rules: {
2473
- "no-use-before-define": "off",
2474
- "no-restricted-syntax": "off",
2475
- "import-x/no-duplicates": "off",
2545
+ "@typescript-eslint/no-use-before-define": "off",
2476
2546
  "import-x/newline-after-import": "off",
2477
- "@typescript-eslint/no-use-before-define": "off"
2547
+ "import-x/no-duplicates": "off",
2548
+ "no-restricted-syntax": "off",
2549
+ "no-use-before-define": "off"
2478
2550
  }
2479
2551
  }
2480
2552
  ];
@@ -2592,16 +2664,16 @@ var INTERSECTION_OR_UNION_TYPES_GROUPS = [
2592
2664
  ];
2593
2665
  var configPerfectionist = (options = {}) => {
2594
2666
  const {
2595
- sortEnums: enableSortEnums = true,
2596
- sortTypes: enableSortTypes = true,
2667
+ partitionByComment = ["@pg", "@perfectionist-group"],
2597
2668
  sortConstants: enableSortConstants = true,
2598
- partitionByComment = ["@pg", "@perfectionist-group"]
2669
+ sortEnums: enableSortEnums = true,
2670
+ sortTypes: enableSortTypes = true
2599
2671
  } = options;
2600
2672
  function getCommonRuleOptions(options2 = {}) {
2601
2673
  const ruleOptions = {
2602
- type: "alphabetical",
2603
- order: "asc",
2604
2674
  ignoreCase: true,
2675
+ order: "asc",
2676
+ type: "alphabetical",
2605
2677
  ...options2.disableNewlinesBetween ? {} : { newlinesBetween: "ignore" },
2606
2678
  ...options2.disableNewlinesBetween ? {} : { partitionByComment }
2607
2679
  };
@@ -2614,10 +2686,21 @@ var configPerfectionist = (options = {}) => {
2614
2686
  perfectionist: default20
2615
2687
  },
2616
2688
  rules: {
2689
+ "perfectionist/sort-exports": [
2690
+ "error",
2691
+ {
2692
+ ...getCommonRuleOptions({
2693
+ disableNewlinesBetween: true
2694
+ }),
2695
+ groupKind: "values-first",
2696
+ type: "line-length"
2697
+ }
2698
+ ],
2617
2699
  "perfectionist/sort-imports": [
2618
2700
  "error",
2619
2701
  {
2620
2702
  ...getCommonRuleOptions(),
2703
+ internalPattern: ["^~/.+", "^@/.+", "^#.+"],
2621
2704
  groups: [
2622
2705
  // Side effect style imports (e.g. 'normalize.css')
2623
2706
  "side-effect-style",
@@ -2653,18 +2736,7 @@ var configPerfectionist = (options = {}) => {
2653
2736
  * Imports that don’t fit into any other group
2654
2737
  */
2655
2738
  "unknown"
2656
- ],
2657
- internalPattern: ["^~/.+", "^@/.+", "^#.+"]
2658
- }
2659
- ],
2660
- "perfectionist/sort-exports": [
2661
- "error",
2662
- {
2663
- ...getCommonRuleOptions({
2664
- disableNewlinesBetween: true
2665
- }),
2666
- type: "line-length",
2667
- groupKind: "values-first"
2739
+ ]
2668
2740
  }
2669
2741
  ],
2670
2742
  "perfectionist/sort-named-exports": [
@@ -2673,8 +2745,8 @@ var configPerfectionist = (options = {}) => {
2673
2745
  ...getCommonRuleOptions({
2674
2746
  disableNewlinesBetween: true
2675
2747
  }),
2676
- ignoreAlias: false,
2677
- groupKind: "values-first"
2748
+ groupKind: "values-first",
2749
+ ignoreAlias: false
2678
2750
  }
2679
2751
  ],
2680
2752
  "perfectionist/sort-named-imports": [
@@ -2683,8 +2755,8 @@ var configPerfectionist = (options = {}) => {
2683
2755
  ...getCommonRuleOptions({
2684
2756
  disableNewlinesBetween: true
2685
2757
  }),
2686
- ignoreAlias: false,
2687
- groupKind: "values-first"
2758
+ groupKind: "values-first",
2759
+ ignoreAlias: false
2688
2760
  }
2689
2761
  ],
2690
2762
  // Overrides rules
@@ -2787,6 +2859,12 @@ var configPerfectionist = (options = {}) => {
2787
2859
  ...getCommonRuleOptions()
2788
2860
  }
2789
2861
  ],
2862
+ "perfectionist/sort-modules": [
2863
+ "error",
2864
+ {
2865
+ ...getCommonRuleOptions()
2866
+ }
2867
+ ],
2790
2868
  "perfectionist/sort-objects": [
2791
2869
  "error",
2792
2870
  {
@@ -2806,12 +2884,6 @@ var configPerfectionist = (options = {}) => {
2806
2884
  ...getCommonRuleOptions()
2807
2885
  }
2808
2886
  ],
2809
- "perfectionist/sort-modules": [
2810
- "error",
2811
- {
2812
- ...getCommonRuleOptions()
2813
- }
2814
- ],
2815
2887
  // Overrides rules
2816
2888
  ...options.overridesConstantsRules
2817
2889
  }
@@ -2833,14 +2905,14 @@ var configUnusedImports = (options = {}) => [
2833
2905
  "unused-imports/no-unused-vars": [
2834
2906
  "error",
2835
2907
  {
2836
- vars: "all",
2837
- varsIgnorePattern: "^_",
2838
2908
  args: "after-used",
2839
2909
  argsIgnorePattern: "^_",
2840
- ignoreRestSiblings: true,
2841
- destructuredArrayIgnorePattern: "^_",
2842
2910
  caughtErrors: "all",
2843
- caughtErrorsIgnorePattern: "^_"
2911
+ caughtErrorsIgnorePattern: "^_",
2912
+ destructuredArrayIgnorePattern: "^_",
2913
+ ignoreRestSiblings: true,
2914
+ vars: "all",
2915
+ varsIgnorePattern: "^_"
2844
2916
  }
2845
2917
  ],
2846
2918
  // Overrides rules