@ntnyq/eslint-config 6.0.0 → 6.1.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.d.mts CHANGED
@@ -1157,6 +1157,11 @@ interface RuleOptions {
1157
1157
  * @see https://html-eslint.org/docs/rules/require-closing-tags
1158
1158
  */
1159
1159
  '@html-eslint/require-closing-tags'?: Linter.RuleEntry<HtmlEslintRequireClosingTags>;
1160
+ /**
1161
+ * Require that certain elements have meaningful content.
1162
+ * @see https://html-eslint.org/docs/rules/require-content
1163
+ */
1164
+ '@html-eslint/require-content'?: Linter.RuleEntry<[]>;
1160
1165
  /**
1161
1166
  * Require `<details>` elements to have a `<summary>` as their first child element.
1162
1167
  * @see https://html-eslint.org/docs/rules/require-details-summary
@@ -1232,6 +1237,11 @@ interface RuleOptions {
1232
1237
  * @see https://html-eslint.org/docs/rules/sort-attrs
1233
1238
  */
1234
1239
  '@html-eslint/sort-attrs'?: Linter.RuleEntry<HtmlEslintSortAttrs>;
1240
+ /**
1241
+ * Require `viewBox` attribute on `<svg>` elements
1242
+ * @see https://html-eslint.org/docs/rules/svg-require-viewbox
1243
+ */
1244
+ '@html-eslint/svg-require-viewbox'?: Linter.RuleEntry<[]>;
1235
1245
  /**
1236
1246
  * Enforce the use of baseline features.
1237
1247
  * @see https://html-eslint.org/docs/rules/use-baseline
@@ -2229,6 +2239,11 @@ interface RuleOptions {
2229
2239
  * @see https://ota-meshi.github.io/eslint-plugin-astro/rules/no-exports-from-components/
2230
2240
  */
2231
2241
  'astro/no-exports-from-components'?: Linter.RuleEntry<[]>;
2242
+ /**
2243
+ * disallow `prerender` export outside of pages/ directory
2244
+ * @see https://ota-meshi.github.io/eslint-plugin-astro/rules/no-prerender-export-outside-pages/
2245
+ */
2246
+ 'astro/no-prerender-export-outside-pages'?: Linter.RuleEntry<[]>;
2232
2247
  /**
2233
2248
  * disallow use of `set:html` to prevent XSS attack
2234
2249
  * @see https://ota-meshi.github.io/eslint-plugin-astro/rules/no-set-html-directive/
@@ -4986,6 +5001,11 @@ interface RuleOptions {
4986
5001
  * @see https://perfectionist.dev/rules/sort-array-includes
4987
5002
  */
4988
5003
  'perfectionist/sort-array-includes'?: Linter.RuleEntry<PerfectionistSortArrayIncludes>;
5004
+ /**
5005
+ * Enforce sorted arrays.
5006
+ * @see https://perfectionist.dev/rules/sort-arrays
5007
+ */
5008
+ 'perfectionist/sort-arrays'?: Linter.RuleEntry<PerfectionistSortArrays>;
4989
5009
  /**
4990
5010
  * Enforce sorted classes.
4991
5011
  * @see https://perfectionist.dev/rules/sort-classes
@@ -8029,7 +8049,7 @@ interface RuleOptions {
8029
8049
  * disallow object, array, and function literals in template
8030
8050
  * @see https://eslint.vuejs.org/rules/no-literals-in-template.html
8031
8051
  */
8032
- 'vue/no-literals-in-template'?: Linter.RuleEntry<[]>;
8052
+ 'vue/no-literals-in-template'?: Linter.RuleEntry<VueNoLiteralsInTemplate>;
8033
8053
  /**
8034
8054
  * disallow unnecessary `<template>`
8035
8055
  * @see https://eslint.vuejs.org/rules/no-lone-template.html
@@ -8422,6 +8442,11 @@ interface RuleOptions {
8422
8442
  * @see https://eslint.vuejs.org/rules/prefer-separate-static-class.html
8423
8443
  */
8424
8444
  'vue/prefer-separate-static-class'?: Linter.RuleEntry<[]>;
8445
+ /**
8446
+ * enforce passing a single argument to custom event emissions
8447
+ * @see https://eslint.vuejs.org/rules/prefer-single-event-payload.html
8448
+ */
8449
+ 'vue/prefer-single-event-payload'?: Linter.RuleEntry<[]>;
8425
8450
  /**
8426
8451
  * Require template literals instead of string concatenation in `<template>`
8427
8452
  * @see https://eslint.vuejs.org/rules/prefer-template.html
@@ -8437,6 +8462,11 @@ interface RuleOptions {
8437
8462
  * @see https://eslint.vuejs.org/rules/prefer-use-template-ref.html
8438
8463
  */
8439
8464
  'vue/prefer-use-template-ref'?: Linter.RuleEntry<[]>;
8465
+ /**
8466
+ * enforce using `v-model` instead of `:prop`/`@update:prop` pair
8467
+ * @see https://eslint.vuejs.org/rules/prefer-v-model.html
8468
+ */
8469
+ 'vue/prefer-v-model'?: Linter.RuleEntry<[]>;
8440
8470
  /**
8441
8471
  * enforce specific casing for the Prop name in Vue components
8442
8472
  * @see https://eslint.vuejs.org/rules/prop-name-casing.html
@@ -8953,6 +8983,8 @@ type EslintCommunityEslintCommentsRequireDescription = [] | [{
8953
8983
  type HtmlEslintAttrsNewline = [] | [{
8954
8984
  closeStyle?: ("newline" | "sameline");
8955
8985
  ifAttrsMoreThan?: number;
8986
+ skip?: string[];
8987
+ inline?: string[];
8956
8988
  }]; // ----- @html-eslint/element-newline -----
8957
8989
  type HtmlEslintElementNewline = [] | [{
8958
8990
  inline?: string[];
@@ -12459,7 +12491,7 @@ type OxfmtOxfmt = [] | [{
12459
12491
  htmlWhitespaceSensitivity?: ("css" | "ignore" | "strict");
12460
12492
  ignorePatterns?: string[];
12461
12493
  insertFinalNewline?: boolean;
12462
- jsdoc?: {
12494
+ jsdoc?: (boolean | {
12463
12495
  addDefaultToDescription?: boolean;
12464
12496
  bracketSpacing?: boolean;
12465
12497
  capitalizeDescriptions?: boolean;
@@ -12471,7 +12503,7 @@ type OxfmtOxfmt = [] | [{
12471
12503
  preferCodeFences?: boolean;
12472
12504
  separateReturnsFromParam?: boolean;
12473
12505
  separateTagGroups?: boolean;
12474
- };
12506
+ });
12475
12507
  jsxSingleQuote?: boolean;
12476
12508
  objectWrap?: ("preserve" | "collapse" | "always");
12477
12509
  printWidth?: number;
@@ -12480,7 +12512,7 @@ type OxfmtOxfmt = [] | [{
12480
12512
  semi?: boolean;
12481
12513
  singleAttributePerLine?: boolean;
12482
12514
  singleQuote?: boolean;
12483
- sortImports?: {
12515
+ sortImports?: (boolean | {
12484
12516
  customGroups?: {
12485
12517
  elementNamePattern?: string[];
12486
12518
  groupName?: string;
@@ -12497,18 +12529,18 @@ type OxfmtOxfmt = [] | [{
12497
12529
  partitionByComment?: boolean;
12498
12530
  partitionByNewline?: boolean;
12499
12531
  sortSideEffects?: boolean;
12500
- };
12532
+ });
12501
12533
  sortPackageJson?: (boolean | {
12502
12534
  sortScripts?: boolean;
12503
12535
  });
12504
- sortTailwindcss?: {
12536
+ sortTailwindcss?: (boolean | {
12505
12537
  attributes?: string[];
12506
12538
  config?: string;
12507
12539
  functions?: string[];
12508
12540
  preserveDuplicates?: boolean;
12509
12541
  preserveWhitespace?: boolean;
12510
12542
  stylesheet?: string;
12511
- };
12543
+ });
12512
12544
  tabWidth?: number;
12513
12545
  trailingComma?: ("all" | "es5" | "none");
12514
12546
  useTabs?: boolean;
@@ -12527,7 +12559,7 @@ type OxfmtOxfmt = [] | [{
12527
12559
  htmlWhitespaceSensitivity?: ("css" | "ignore" | "strict");
12528
12560
  ignorePatterns?: string[];
12529
12561
  insertFinalNewline?: boolean;
12530
- jsdoc?: {
12562
+ jsdoc?: (boolean | {
12531
12563
  addDefaultToDescription?: boolean;
12532
12564
  bracketSpacing?: boolean;
12533
12565
  capitalizeDescriptions?: boolean;
@@ -12539,7 +12571,7 @@ type OxfmtOxfmt = [] | [{
12539
12571
  preferCodeFences?: boolean;
12540
12572
  separateReturnsFromParam?: boolean;
12541
12573
  separateTagGroups?: boolean;
12542
- };
12574
+ });
12543
12575
  jsxSingleQuote?: boolean;
12544
12576
  objectWrap?: ("preserve" | "collapse" | "always");
12545
12577
  printWidth?: number;
@@ -12548,7 +12580,7 @@ type OxfmtOxfmt = [] | [{
12548
12580
  semi?: boolean;
12549
12581
  singleAttributePerLine?: boolean;
12550
12582
  singleQuote?: boolean;
12551
- sortImports?: {
12583
+ sortImports?: (boolean | {
12552
12584
  customGroups?: {
12553
12585
  elementNamePattern?: string[];
12554
12586
  groupName?: string;
@@ -12565,18 +12597,18 @@ type OxfmtOxfmt = [] | [{
12565
12597
  partitionByComment?: boolean;
12566
12598
  partitionByNewline?: boolean;
12567
12599
  sortSideEffects?: boolean;
12568
- };
12600
+ });
12569
12601
  sortPackageJson?: (boolean | {
12570
12602
  sortScripts?: boolean;
12571
12603
  });
12572
- sortTailwindcss?: {
12604
+ sortTailwindcss?: (boolean | {
12573
12605
  attributes?: string[];
12574
12606
  config?: string;
12575
12607
  functions?: string[];
12576
12608
  preserveDuplicates?: boolean;
12577
12609
  preserveWhitespace?: boolean;
12578
12610
  stylesheet?: string;
12579
- };
12611
+ });
12580
12612
  tabWidth?: number;
12581
12613
  trailingComma?: ("all" | "es5" | "none");
12582
12614
  useTabs?: boolean;
@@ -12707,6 +12739,112 @@ type PerfectionistSortArrayIncludes = {
12707
12739
  } | string)));
12708
12740
  });
12709
12741
  partitionByNewLine?: boolean;
12742
+ }[]; // ----- perfectionist/sort-arrays -----
12743
+ type PerfectionistSortArrays = {
12744
+ fallbackSort?: {
12745
+ type: ("alphabetical" | "natural" | "line-length" | "custom" | "unsorted" | "subgroup-order");
12746
+ order?: ("asc" | "desc");
12747
+ };
12748
+ type?: ("alphabetical" | "natural" | "line-length" | "custom" | "unsorted" | "subgroup-order");
12749
+ specialCharacters?: ("remove" | "trim" | "keep");
12750
+ ignoreCase?: boolean;
12751
+ alphabet?: string;
12752
+ locales?: (string | string[]);
12753
+ order?: ("asc" | "desc");
12754
+ customGroups?: ({
12755
+ fallbackSort?: {
12756
+ type: ("alphabetical" | "natural" | "line-length" | "custom" | "unsorted" | "subgroup-order");
12757
+ order?: ("asc" | "desc");
12758
+ };
12759
+ type?: ("alphabetical" | "natural" | "line-length" | "custom" | "unsorted" | "subgroup-order");
12760
+ groupName: string;
12761
+ newlinesInside?: ("ignore" | number);
12762
+ order?: ("asc" | "desc");
12763
+ anyOf: [{
12764
+ elementNamePattern?: (({
12765
+ pattern: string;
12766
+ flags?: string;
12767
+ } | string)[] | ({
12768
+ pattern: string;
12769
+ flags?: string;
12770
+ } | string));
12771
+ selector?: "literal";
12772
+ }, ...({
12773
+ elementNamePattern?: (({
12774
+ pattern: string;
12775
+ flags?: string;
12776
+ } | string)[] | ({
12777
+ pattern: string;
12778
+ flags?: string;
12779
+ } | string));
12780
+ selector?: "literal";
12781
+ })[]];
12782
+ } | {
12783
+ fallbackSort?: {
12784
+ type: ("alphabetical" | "natural" | "line-length" | "custom" | "unsorted" | "subgroup-order");
12785
+ order?: ("asc" | "desc");
12786
+ };
12787
+ type?: ("alphabetical" | "natural" | "line-length" | "custom" | "unsorted" | "subgroup-order");
12788
+ groupName: string;
12789
+ newlinesInside?: ("ignore" | number);
12790
+ order?: ("asc" | "desc");
12791
+ elementNamePattern?: (({
12792
+ pattern: string;
12793
+ flags?: string;
12794
+ } | string)[] | ({
12795
+ pattern: string;
12796
+ flags?: string;
12797
+ } | string));
12798
+ selector?: "literal";
12799
+ })[];
12800
+ newlinesInside?: (("ignore" | number) | "newlinesBetween");
12801
+ groups?: (string | [string, ...(string)[]] | {
12802
+ newlinesBetween: ("ignore" | number);
12803
+ } | {
12804
+ group: (string | [string, ...(string)[]]);
12805
+ fallbackSort?: {
12806
+ type: ("alphabetical" | "natural" | "line-length" | "custom" | "unsorted" | "subgroup-order");
12807
+ order?: ("asc" | "desc");
12808
+ };
12809
+ commentAbove?: string;
12810
+ type?: ("alphabetical" | "natural" | "line-length" | "custom" | "unsorted" | "subgroup-order");
12811
+ newlinesInside?: ("ignore" | number);
12812
+ order?: ("asc" | "desc");
12813
+ })[];
12814
+ newlinesBetween?: ("ignore" | number);
12815
+ useConfigurationIf: {
12816
+ allNamesMatchPattern?: (({
12817
+ pattern: string;
12818
+ flags?: string;
12819
+ } | string)[] | ({
12820
+ pattern: string;
12821
+ flags?: string;
12822
+ } | string));
12823
+ matchesAstSelector?: string;
12824
+ };
12825
+ partitionByComment?: (boolean | (({
12826
+ pattern: string;
12827
+ flags?: string;
12828
+ } | string)[] | ({
12829
+ pattern: string;
12830
+ flags?: string;
12831
+ } | string)) | {
12832
+ block?: (boolean | (({
12833
+ pattern: string;
12834
+ flags?: string;
12835
+ } | string)[] | ({
12836
+ pattern: string;
12837
+ flags?: string;
12838
+ } | string)));
12839
+ line?: (boolean | (({
12840
+ pattern: string;
12841
+ flags?: string;
12842
+ } | string)[] | ({
12843
+ pattern: string;
12844
+ flags?: string;
12845
+ } | string)));
12846
+ });
12847
+ partitionByNewLine?: boolean;
12710
12848
  }[]; // ----- perfectionist/sort-classes -----
12711
12849
  type PerfectionistSortClasses = {
12712
12850
  fallbackSort?: {
@@ -12836,6 +12974,7 @@ type PerfectionistSortClasses = {
12836
12974
  matchesAstSelector?: string;
12837
12975
  };
12838
12976
  useExperimentalDependencyDetection?: boolean;
12977
+ newlinesBetweenOverloadSignatures?: ("ignore" | number);
12839
12978
  ignoreCallbackDependenciesPatterns?: (({
12840
12979
  pattern: string;
12841
12980
  flags?: string;
@@ -14199,6 +14338,7 @@ type PerfectionistSortModules = [] | [{
14199
14338
  })[];
14200
14339
  newlinesBetween?: ("ignore" | number);
14201
14340
  useExperimentalDependencyDetection?: boolean;
14341
+ newlinesBetweenOverloadSignatures?: ("ignore" | number);
14202
14342
  partitionByComment?: (boolean | (({
14203
14343
  pattern: string;
14204
14344
  flags?: string;
@@ -17166,6 +17306,9 @@ type VueNoIrregularWhitespace = [] | [{
17166
17306
  skipRegExps?: boolean;
17167
17307
  skipHTMLAttributeValues?: boolean;
17168
17308
  skipHTMLTextContents?: boolean;
17309
+ }]; // ----- vue/no-literals-in-template -----
17310
+ type VueNoLiteralsInTemplate = [] | [{
17311
+ ignores?: string[];
17169
17312
  }]; // ----- vue/no-lone-template -----
17170
17313
  type VueNoLoneTemplate = [] | [{
17171
17314
  ignoreAccessible?: boolean;
@@ -17320,7 +17463,7 @@ type VueNoUnusedComponents = [] | [{
17320
17463
  ignoreWhenBindingPresent?: boolean;
17321
17464
  }]; // ----- vue/no-unused-properties -----
17322
17465
  type VueNoUnusedProperties = [] | [{
17323
- groups?: ("props" | "data" | "asyncData" | "computed" | "methods" | "setup")[];
17466
+ groups?: ("props" | "data" | "asyncData" | "computed" | "methods" | "setup" | "inject")[];
17324
17467
  deepData?: boolean;
17325
17468
  ignorePublicMembers?: boolean;
17326
17469
  unreferencedOptions?: ("unknownMemberAsUnreferenced" | "returnAsUnreferenced")[];
package/dist/index.mjs CHANGED
@@ -155,7 +155,11 @@ const GLOB_EXCLUDE = [
155
155
  "**/.yarnrc",
156
156
  "**/.husky",
157
157
  "**/src-tauri/gen",
158
- "**/src-tauri/target"
158
+ "**/src-tauri/target",
159
+ "**/*.context",
160
+ "**/*.claude",
161
+ "**/*.agents",
162
+ "**/.*/skills"
159
163
  ];
160
164
  //#endregion
161
165
  //#region src/configs/vue.ts
@@ -571,7 +575,7 @@ const configYml = (options = {}) => {
571
575
  //#region src/utils/env.ts
572
576
  const hasPinia = () => isPackageExists("pinia");
573
577
  const hasVitest = () => isPackageExists("vitest");
574
- const hasTypeScript = () => isPackageExists("typescript");
578
+ const hasTypeScript = () => isPackageExists("typescript") || isPackageExists("@typescript/native-preview");
575
579
  const hasShadcnVue = () => (isPackageExists("radix-vue") || isPackageExists("reka-ui")) && isPackageExists("class-variance-authority") && isPackageExists("clsx");
576
580
  const hasUnoCSS = () => isPackageExists("unocss") || isPackageExists("@unocss/postcss") || isPackageExists("@unocss/webpack") || isPackageExists("@unocss/nuxt");
577
581
  const hasVue = () => isPackageExists("vue") || isPackageExists("nuxt") || isPackageExists("vitepress") || isPackageExists("vuepress") || isPackageExists("@slidev/cli") || isPackageExists("vue", { paths: [resolve(process.cwd(), "playground"), resolve(process.cwd(), "docs")] });
@@ -1344,10 +1348,16 @@ const configJsdoc = (options = {}) => [{
1344
1348
  name: "ntnyq/jsdoc",
1345
1349
  plugins: { jsdoc: pluginJsdoc },
1346
1350
  rules: {
1351
+ /**
1352
+ * @pg Disabled rules
1353
+ */
1347
1354
  "jsdoc/prefer-import-tag": "off",
1348
1355
  "jsdoc/require-tags": "off",
1349
1356
  "jsdoc/tag-lines": "off",
1350
1357
  "jsdoc/text-escaping": "off",
1358
+ /**
1359
+ * @pg Warning only rules
1360
+ */
1351
1361
  "jsdoc/check-access": "warn",
1352
1362
  "jsdoc/implements-on-classes": "warn",
1353
1363
  "jsdoc/require-param-name": "warn",
@@ -1358,6 +1368,9 @@ const configJsdoc = (options = {}) => [{
1358
1368
  "jsdoc/require-returns-description": "warn",
1359
1369
  "jsdoc/require-template-description": "warn",
1360
1370
  "jsdoc/require-yields-check": "warn",
1371
+ /**
1372
+ * @pg Maybe next release
1373
+ */
1361
1374
  "jsdoc/require-next-description": "warn",
1362
1375
  "jsdoc/require-next-type": "warn",
1363
1376
  "jsdoc/require-throws-description": "warn",
@@ -1367,6 +1380,9 @@ const configJsdoc = (options = {}) => [{
1367
1380
  "jsdoc/ts-method-signature-style": "warn",
1368
1381
  "jsdoc/ts-no-empty-object-type": "warn",
1369
1382
  "jsdoc/ts-no-unnecessary-template-expression": "warn",
1383
+ /**
1384
+ * @pg Enabled rules
1385
+ */
1370
1386
  "jsdoc/check-alignment": "error",
1371
1387
  "jsdoc/check-line-alignment": "error",
1372
1388
  "jsdoc/check-param-names": "error",
@@ -1383,6 +1399,9 @@ const configJsdoc = (options = {}) => [{
1383
1399
  "internal"
1384
1400
  ] }],
1385
1401
  "jsdoc/check-types": "error",
1402
+ /**
1403
+ * @pg Fixable rules
1404
+ */
1386
1405
  "jsdoc/empty-tags": "error",
1387
1406
  "jsdoc/multiline-blocks": "error",
1388
1407
  "jsdoc/no-bad-blocks": ["error", { ignore: [
@@ -1919,6 +1938,9 @@ const configUnicorn = (options = {}) => {
1919
1938
  plugins: { unicorn: pluginUnicorn },
1920
1939
  rules: {
1921
1940
  "unicorn/explicit-length-check": "off",
1941
+ /**
1942
+ * @see https://caniuse.com/?search=globalThis
1943
+ */
1922
1944
  "unicorn/prefer-global-this": "off",
1923
1945
  "unicorn/prefer-top-level-await": "off",
1924
1946
  "unicorn/consistent-assert": "error",
@@ -1955,6 +1977,9 @@ const configUnicorn = (options = {}) => {
1955
1977
  "unicorn/prefer-structured-clone": "error",
1956
1978
  "unicorn/switch-case-braces": ["error", "avoid"],
1957
1979
  "unicorn/switch-case-break-position": "error",
1980
+ /**
1981
+ * @pg Error
1982
+ */
1958
1983
  "unicorn/catch-error-name": ["error", {
1959
1984
  name: "err",
1960
1985
  ignore: ["^_."]
@@ -1963,19 +1988,40 @@ const configUnicorn = (options = {}) => {
1963
1988
  "unicorn/no-useless-error-capture-stack-trace": "error",
1964
1989
  "unicorn/prefer-type-error": "error",
1965
1990
  "unicorn/throw-new-error": "error",
1991
+ /**
1992
+ * @pg Number
1993
+ */
1966
1994
  "unicorn/no-zero-fractions": "error",
1967
1995
  "unicorn/number-literal-case": ["error", { hexadecimalValue: "lowercase" }],
1968
1996
  "unicorn/prefer-number-properties": "error",
1997
+ /**
1998
+ * @pg BigInt
1999
+ */
1969
2000
  "unicorn/prefer-bigint-literals": "error",
2001
+ /**
2002
+ * @pg RegExp
2003
+ */
2004
+ /**
2005
+ * Prefer `eslint-plugin-regexp` instead
2006
+ */
1970
2007
  "unicorn/better-regex": "off",
1971
2008
  "unicorn/prefer-regexp-test": "error",
2009
+ /**
2010
+ * @pg Date
2011
+ */
1972
2012
  "unicorn/consistent-date-clone": "error",
1973
2013
  "unicorn/prefer-date-now": "error",
2014
+ /**
2015
+ * @pg String
2016
+ */
1974
2017
  "unicorn/consistent-template-literal-escape": "error",
1975
2018
  "unicorn/prefer-code-point": "error",
1976
2019
  "unicorn/prefer-string-slice": "error",
1977
2020
  "unicorn/prefer-string-starts-ends-with": "error",
1978
2021
  "unicorn/prefer-string-trim-start-end": "error",
2022
+ /**
2023
+ * @pg DOM
2024
+ */
1979
2025
  "unicorn/no-invalid-remove-event-listener": "error",
1980
2026
  "unicorn/prefer-add-event-listener": "error",
1981
2027
  "unicorn/prefer-classlist-toggle": "error",
@@ -1985,7 +2031,15 @@ const configUnicorn = (options = {}) => {
1985
2031
  "unicorn/prefer-dom-node-text-content": "error",
1986
2032
  "unicorn/prefer-modern-dom-apis": "error",
1987
2033
  "unicorn/prefer-query-selector": "error",
2034
+ /**
2035
+ * @pg Array
2036
+ */
1988
2037
  "unicorn/no-array-callback-reference": "off",
2038
+ /**
2039
+ * TODO: chrome 110, baseline 2023 required
2040
+ *
2041
+ * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toReversed#browser_compatibility
2042
+ */
1989
2043
  "unicorn/no-array-reverse": "off",
1990
2044
  "unicorn/no-array-sort": "off",
1991
2045
  "unicorn/no-array-method-this-argument": "error",
@@ -1999,8 +2053,14 @@ const configUnicorn = (options = {}) => {
1999
2053
  "unicorn/prefer-array-some": "error",
2000
2054
  "unicorn/prefer-single-call": "error",
2001
2055
  "unicorn/require-array-join-separator": "error",
2056
+ /**
2057
+ * @pg Set
2058
+ */
2002
2059
  "unicorn/prefer-set-has": "error",
2003
2060
  "unicorn/prefer-set-size": "error",
2061
+ /**
2062
+ * @pg Module
2063
+ */
2004
2064
  "unicorn/require-module-specifiers": "off",
2005
2065
  "unicorn/require-module-attributes": "error",
2006
2066
  ...options.overrides
@@ -2149,6 +2209,10 @@ const configPrettier = (options = {}) => {
2149
2209
  "vue/space-infix-ops": "off",
2150
2210
  "vue/space-unary-ops": "off",
2151
2211
  "vue/template-curly-spacing": "off",
2212
+ /**
2213
+ * @pg
2214
+ * @see {@link https://github.com/prettier/eslint-plugin-prettier/blob/cd48a275f130e515f23cebdf7c6cb588b041cd64/eslint-plugin-prettier.js#L101-L103}
2215
+ */
2152
2216
  "arrow-body-style": "off",
2153
2217
  "prefer-arrow-callback": "off",
2154
2218
  "prettier/prettier": options.severity || "warn",
@@ -3004,10 +3068,9 @@ const configPerfectionist = (options = {}) => {
3004
3068
  */
3005
3069
  const configUnusedImports = async (options = {}) => {
3006
3070
  await ensurePackages(["eslint-plugin-unused-imports"]);
3007
- const pluginUnusedImports = await interopDefault(import("eslint-plugin-unused-imports"));
3008
3071
  return [{
3009
3072
  name: "ntnyq/unused-imports",
3010
- plugins: { "unused-imports": pluginUnusedImports },
3073
+ plugins: { "unused-imports": await interopDefault(import("eslint-plugin-unused-imports")) },
3011
3074
  rules: {
3012
3075
  "@typescript-eslint/no-unused-vars": "off",
3013
3076
  "unused-imports/no-unused-imports": "error",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ntnyq/eslint-config",
3
3
  "type": "module",
4
- "version": "6.0.0",
4
+ "version": "6.1.0",
5
5
  "description": "An opinionated ESLint config preset of ntnyq",
6
6
  "keywords": [
7
7
  "eslint",
@@ -36,16 +36,16 @@
36
36
  "tag": "latest"
37
37
  },
38
38
  "peerDependencies": {
39
- "@html-eslint/eslint-plugin": "^0.58.1",
40
- "@html-eslint/parser": "^0.58.1",
39
+ "@html-eslint/eslint-plugin": "^0.59.0",
40
+ "@html-eslint/parser": "^0.59.0",
41
41
  "astro-eslint-parser": "^1.4.0",
42
42
  "eslint": "^9.38.0 || ^10.0.0",
43
43
  "eslint-plugin-astro": "^1.6.0",
44
44
  "eslint-plugin-eslint-plugin": "^7.3.2",
45
45
  "eslint-plugin-pnpm": "^1.6.0",
46
- "eslint-plugin-svelte": "^3.16.0",
46
+ "eslint-plugin-svelte": "^3.17.0",
47
47
  "eslint-plugin-unused-imports": "^4.4.1",
48
- "svelte": "^5.55.0",
48
+ "svelte": "^5.55.1",
49
49
  "svelte-eslint-parser": "^1.6.0"
50
50
  },
51
51
  "peerDependenciesMeta": {
@@ -82,14 +82,14 @@
82
82
  },
83
83
  "dependencies": {
84
84
  "@antfu/install-pkg": "^1.1.0",
85
- "@clack/prompts": "^1.1.0",
85
+ "@clack/prompts": "^1.2.0",
86
86
  "@eslint-community/eslint-plugin-eslint-comments": "^4.7.1",
87
87
  "@eslint/js": "^10.0.1",
88
88
  "@eslint/markdown": "^8.0.1",
89
- "@unocss/eslint-plugin": "^66.6.7",
90
- "@vitest/eslint-plugin": "^1.6.13",
89
+ "@unocss/eslint-plugin": "^66.6.8",
90
+ "@vitest/eslint-plugin": "^1.6.16",
91
91
  "eslint-config-flat-gitignore": "^2.3.0",
92
- "eslint-flat-config-utils": "^3.0.2",
92
+ "eslint-flat-config-utils": "3.0.2",
93
93
  "eslint-import-resolver-typescript": "^4.4.4",
94
94
  "eslint-merge-processors": "^2.0.0",
95
95
  "eslint-parser-plain": "^0.1.1",
@@ -99,51 +99,51 @@
99
99
  "eslint-plugin-depend": "^1.5.0",
100
100
  "eslint-plugin-github-action": "^0.2.0",
101
101
  "eslint-plugin-import-x": "^4.16.2",
102
- "eslint-plugin-jsdoc": "^62.8.1",
102
+ "eslint-plugin-jsdoc": "^62.9.0",
103
103
  "eslint-plugin-jsonc": "^3.1.2",
104
104
  "eslint-plugin-n": "^17.24.0",
105
105
  "eslint-plugin-no-only-tests": "^3.3.0",
106
- "eslint-plugin-ntnyq": "^0.13.0",
107
- "eslint-plugin-oxfmt": "^0.2.0",
108
- "eslint-plugin-perfectionist": "^5.7.0",
106
+ "eslint-plugin-ntnyq": "^0.14.0",
107
+ "eslint-plugin-oxfmt": "^0.4.0",
108
+ "eslint-plugin-perfectionist": "^5.9.0",
109
109
  "eslint-plugin-pinia": "^0.4.2",
110
110
  "eslint-plugin-prettier": "^5.5.5",
111
111
  "eslint-plugin-regexp": "^3.1.0",
112
112
  "eslint-plugin-svgo": "^0.12.0",
113
113
  "eslint-plugin-toml": "^1.3.1",
114
114
  "eslint-plugin-unicorn": "^64.0.0",
115
- "eslint-plugin-vue": "^10.8.0",
115
+ "eslint-plugin-vue": "^10.9.0",
116
116
  "eslint-plugin-yml": "^3.3.1",
117
117
  "eslint-processor-vue-blocks": "^2.0.0",
118
- "globals": "^17.4.0",
118
+ "globals": "^17.5.0",
119
119
  "jsonc-eslint-parser": "^3.1.0",
120
120
  "local-pkg": "^1.1.2",
121
121
  "toml-eslint-parser": "^1.0.3",
122
- "typescript-eslint": "^8.58.0",
122
+ "typescript-eslint": "^8.59.0",
123
123
  "vue-eslint-parser": "^10.4.0",
124
124
  "yaml-eslint-parser": "^2.0.0"
125
125
  },
126
126
  "devDependencies": {
127
- "@types/node": "^25.5.0",
128
- "@typescript-eslint/types": "^8.58.0",
129
- "@typescript-eslint/utils": "^8.58.0",
130
- "@typescript/native-preview": "^7.0.0-dev.20260330.1",
127
+ "@types/node": "^25.6.0",
128
+ "@typescript-eslint/types": "^8.59.0",
129
+ "@typescript-eslint/utils": "^8.59.0",
130
+ "@typescript/native-preview": "^7.0.0-dev.20260422.1",
131
131
  "bumpp": "^11.0.1",
132
132
  "consola": "^3.4.2",
133
- "eslint": "^10.1.0",
133
+ "eslint": "^10.2.1",
134
134
  "eslint-typegen": "^2.3.1",
135
135
  "husky": "^9.1.7",
136
136
  "jiti": "^2.6.1",
137
- "nano-staged": "^0.9.0",
137
+ "nano-staged": "^1.0.2",
138
138
  "npm-run-all2": "^8.0.4",
139
- "oxfmt": "^0.42.0",
140
- "prettier": "^3.8.1",
141
- "tinyglobby": "^0.2.15",
142
- "tsdown": "^0.21.7",
139
+ "oxfmt": "^0.46.0",
140
+ "prettier": "^3.8.3",
141
+ "tinyglobby": "^0.2.16",
142
+ "tsdown": "^0.21.10",
143
143
  "tsx": "^4.21.0",
144
- "typescript": "^6.0.2",
144
+ "typescript": "^6.0.3",
145
145
  "uncase": "^0.2.0",
146
- "vitest": "^4.1.2"
146
+ "vitest": "^4.1.5"
147
147
  },
148
148
  "engines": {
149
149
  "node": "^20.19.0 || ^22.13.0 || >=24"