eslint-config-un 0.3.0 → 0.4.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/README.md CHANGED
@@ -25,7 +25,7 @@ Includes the rules from the following configs & plugins:
25
25
  - [promise](https://www.npmjs.com/package/eslint-plugin-promise)
26
26
  - [regexp](https://www.npmjs.com/package/eslint-plugin-regexp)
27
27
  - [security](https://www.npmjs.com/package/eslint-plugin-security)
28
- - [sonar](https://www.npmjs.com/package/eslint-plugin-sonarjs)
28
+ - [sonar](https://www.npmjs.com/package/eslint-plugin-sonarjs) (v3 since v0.4.0, v1 before)
29
29
  - [tailwind](https://www.npmjs.com/package/eslint-plugin-tailwindcss)
30
30
  - [jsonc](https://www.npmjs.com/package/eslint-plugin-jsonc) (since v0.1.4)
31
31
  - [yaml](https://www.npmjs.com/package/eslint-plugin-yaml) (since v0.1.0)
@@ -37,6 +37,8 @@ Includes the rules from the following configs & plugins:
37
37
  - [css](https://www.npmjs.com/package/eslint-plugin-css) (since v0.2.0)
38
38
  - [jest](https://www.npmjs.com/package/eslint-plugin-jest) (+ [jest-extended](https://www.npmjs.com/package/eslint-plugin-jest-extended)) (since v0.3.0)
39
39
  - [vitest](https://www.npmjs.com/package/@vitest/eslint-plugin) (since v0.3.0)
40
+ - [jsdoc](https://www.npmjs.com/package/eslint-plugin-jsdoc) (since v0.3.1)
41
+ - [perfectionist](https://www.npmjs.com/package/eslint-plugin-perfectionist) (since v0.4.0)
40
42
 
41
43
  ## Features
42
44
 
@@ -72,6 +74,7 @@ export default eslintConfig({
72
74
  - `yaml`
73
75
  - `toml`
74
76
  - `package-json`
77
+ - `perfectionist`
75
78
  - Some rules are set to warn by default. You can change some or even all such rule's reporting level using `errorsInsteadOfWarnings` option. You can find all such rules by inspecting the source code of this package.
76
79
 
77
80
  ### Certain rules are disabled for code blocks inside `*.md` files
package/dist/index.cjs CHANGED
@@ -33,19 +33,19 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
33
33
  ));
34
34
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
35
35
 
36
- // node_modules/.pnpm/tsup@8.3.5_jiti@2.0.0_postcss@8.4.47_tsx@4.16.2_typescript@5.7.2_yaml@2.4.5/node_modules/tsup/assets/cjs_shims.js
36
+ // node_modules/.pnpm/tsup@8.3.5_jiti@2.0.0_postcss@8.4.47_tsx@4.16.2_typescript@5.7.3_yaml@2.4.5/node_modules/tsup/assets/cjs_shims.js
37
37
  var init_cjs_shims = __esm({
38
- "node_modules/.pnpm/tsup@8.3.5_jiti@2.0.0_postcss@8.4.47_tsx@4.16.2_typescript@5.7.2_yaml@2.4.5/node_modules/tsup/assets/cjs_shims.js"() {
38
+ "node_modules/.pnpm/tsup@8.3.5_jiti@2.0.0_postcss@8.4.47_tsx@4.16.2_typescript@5.7.3_yaml@2.4.5/node_modules/tsup/assets/cjs_shims.js"() {
39
39
  "use strict";
40
40
  }
41
41
  });
42
42
 
43
- // node_modules/.pnpm/@eslint+js@9.17.0/node_modules/@eslint/js/package.json
43
+ // node_modules/.pnpm/@eslint+js@9.18.0/node_modules/@eslint/js/package.json
44
44
  var require_package = __commonJS({
45
- "node_modules/.pnpm/@eslint+js@9.17.0/node_modules/@eslint/js/package.json"(exports2, module2) {
45
+ "node_modules/.pnpm/@eslint+js@9.18.0/node_modules/@eslint/js/package.json"(exports2, module2) {
46
46
  module2.exports = {
47
47
  name: "@eslint/js",
48
- version: "9.17.0",
48
+ version: "9.18.0",
49
49
  description: "ESLint JavaScript language implementation",
50
50
  main: "./src/index.js",
51
51
  types: "./types/index.d.ts",
@@ -81,9 +81,9 @@ var require_package = __commonJS({
81
81
  }
82
82
  });
83
83
 
84
- // node_modules/.pnpm/@eslint+js@9.17.0/node_modules/@eslint/js/src/configs/eslint-all.js
84
+ // node_modules/.pnpm/@eslint+js@9.18.0/node_modules/@eslint/js/src/configs/eslint-all.js
85
85
  var require_eslint_all = __commonJS({
86
- "node_modules/.pnpm/@eslint+js@9.17.0/node_modules/@eslint/js/src/configs/eslint-all.js"(exports2, module2) {
86
+ "node_modules/.pnpm/@eslint+js@9.18.0/node_modules/@eslint/js/src/configs/eslint-all.js"(exports2, module2) {
87
87
  "use strict";
88
88
  init_cjs_shims();
89
89
  module2.exports = Object.freeze({
@@ -290,9 +290,9 @@ var require_eslint_all = __commonJS({
290
290
  }
291
291
  });
292
292
 
293
- // node_modules/.pnpm/@eslint+js@9.17.0/node_modules/@eslint/js/src/configs/eslint-recommended.js
293
+ // node_modules/.pnpm/@eslint+js@9.18.0/node_modules/@eslint/js/src/configs/eslint-recommended.js
294
294
  var require_eslint_recommended = __commonJS({
295
- "node_modules/.pnpm/@eslint+js@9.17.0/node_modules/@eslint/js/src/configs/eslint-recommended.js"(exports2, module2) {
295
+ "node_modules/.pnpm/@eslint+js@9.18.0/node_modules/@eslint/js/src/configs/eslint-recommended.js"(exports2, module2) {
296
296
  "use strict";
297
297
  init_cjs_shims();
298
298
  module2.exports = Object.freeze({
@@ -363,15 +363,15 @@ var require_eslint_recommended = __commonJS({
363
363
  }
364
364
  });
365
365
 
366
- // node_modules/.pnpm/@eslint+js@9.17.0/node_modules/@eslint/js/src/index.js
366
+ // node_modules/.pnpm/@eslint+js@9.18.0/node_modules/@eslint/js/src/index.js
367
367
  var require_src = __commonJS({
368
- "node_modules/.pnpm/@eslint+js@9.17.0/node_modules/@eslint/js/src/index.js"(exports2, module2) {
368
+ "node_modules/.pnpm/@eslint+js@9.18.0/node_modules/@eslint/js/src/index.js"(exports2, module2) {
369
369
  "use strict";
370
370
  init_cjs_shims();
371
- var { version } = require_package();
371
+ var { name, version } = require_package();
372
372
  module2.exports = {
373
373
  meta: {
374
- name: "@eslint/js",
374
+ name,
375
375
  version
376
376
  },
377
377
  configs: {
@@ -383,12 +383,12 @@ var require_src = __commonJS({
383
383
  });
384
384
 
385
385
  // src/index.ts
386
- var src_exports = {};
387
- __export(src_exports, {
386
+ var index_exports = {};
387
+ __export(index_exports, {
388
388
  DEFAULT_GLOBAL_IGNORES: () => DEFAULT_GLOBAL_IGNORES,
389
389
  eslintConfig: () => eslintConfig
390
390
  });
391
- module.exports = __toCommonJS(src_exports);
391
+ module.exports = __toCommonJS(index_exports);
392
392
  init_cjs_shims();
393
393
  var import_node_fs = __toESM(require("fs"), 1);
394
394
  var import_eslint_plugin2 = __toESM(require("@stylistic/eslint-plugin"), 1);
@@ -453,6 +453,15 @@ var createPluginObjectRenamer = (from, to) => {
453
453
  ])
454
454
  );
455
455
  };
456
+ var bulkChangeRuleSeverity = (rules, severity) => Object.fromEntries(
457
+ Object.entries(rules).map(
458
+ ([ruleName, ruleOptions]) => [
459
+ ruleName,
460
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
461
+ Array.isArray(ruleOptions) ? [severity, ...ruleOptions.slice(1)] : severity
462
+ ]
463
+ )
464
+ );
456
465
  var ConfigEntryBuilder = class {
457
466
  constructor(options, internalOptions) {
458
467
  this.options = options;
@@ -487,14 +496,15 @@ var ConfigEntryBuilder = class {
487
496
  const errorsInsteadOfWarnings = this.internalOptions.globalOptions?.errorsInsteadOfWarnings;
488
497
  const severityFinal = configOptions.forceSeverity ?? (severity === WARNING && (errorsInsteadOfWarnings === true || Array.isArray(errorsInsteadOfWarnings) && errorsInsteadOfWarnings.includes(ruleName)) ? ERROR : severity);
489
498
  const ruleNameFinal = `${options?.disableAutofix ? "disable-autofix/" : ""}${ruleName}`;
490
- (configFinal.rules ||= {})[ruleNameFinal] = [severityFinal, ...ruleOptions || []];
499
+ configFinal.rules ||= {};
500
+ configFinal.rules[ruleNameFinal] = [severityFinal, ...ruleOptions || []];
491
501
  if (options?.disableAutofix) {
492
- (configFinal.rules ||= {})[ruleName] = 0;
502
+ configFinal.rules[ruleName] = 0;
493
503
  }
494
504
  if (options?.overrideBaseRule) {
495
505
  const baseRuleName = typeof options.overrideBaseRule === "string" ? options.overrideBaseRule : ruleName.split("/").slice(1).join("/");
496
506
  if (baseRuleName) {
497
- (configFinal.rules ||= {})[baseRuleName] = 0;
507
+ configFinal.rules[baseRuleName] = 0;
498
508
  }
499
509
  }
500
510
  return result;
@@ -505,11 +515,13 @@ var ConfigEntryBuilder = class {
505
515
  addRule: generateAddRuleFn(),
506
516
  addAnyRule: generateAddRuleFn(),
507
517
  addOverrides: () => {
508
- Object.assign(configFinal.rules ||= {}, this.options.overrides);
518
+ configFinal.rules ||= {};
519
+ Object.assign(configFinal.rules, this.options.overrides);
509
520
  return result;
510
521
  },
511
522
  addBulkRules: (rules) => {
512
- Object.assign(configFinal.rules ||= {}, rules);
523
+ configFinal.rules ||= {};
524
+ Object.assign(configFinal.rules, rules);
513
525
  return result;
514
526
  }
515
527
  };
@@ -878,6 +890,53 @@ var jsEslintConfig = (options = {}, internalOptions = {}) => {
878
890
  return builder.getAllConfigs();
879
891
  };
880
892
 
893
+ // src/configs/jsdoc.ts
894
+ init_cjs_shims();
895
+ var import_eslint_plugin_jsdoc = __toESM(require("eslint-plugin-jsdoc"), 1);
896
+ var jsdocEslintConfig = (options = {}, internalOptions = {}) => {
897
+ const {
898
+ settings: pluginSettings,
899
+ typescript: typescriptOnlyRules = internalOptions.isTypescriptEnabled
900
+ } = options;
901
+ const builder = new ConfigEntryBuilder(options, internalOptions);
902
+ builder.addConfig("jsdoc/setup", {
903
+ plugins: {
904
+ jsdoc: import_eslint_plugin_jsdoc.default
905
+ }
906
+ });
907
+ builder.addConfig(["jsdoc", { includeDefaultFilesAndIgnores: true }], {
908
+ ...pluginSettings && {
909
+ settings: {
910
+ jsdoc: pluginSettings
911
+ }
912
+ }
913
+ }).addBulkRules(import_eslint_plugin_jsdoc.default.configs["flat/recommended-error"].rules).addRule("jsdoc/check-indentation", ERROR).addRule("jsdoc/check-line-alignment", ERROR).addRule("jsdoc/check-syntax", ERROR).addRule("jsdoc/check-template-names", ERROR).addRule("jsdoc/lines-before-block", ERROR).addRule("jsdoc/no-bad-blocks", ERROR).addRule("jsdoc/no-blank-block-descriptions", ERROR).addRule("jsdoc/no-blank-blocks", ERROR).addRule("jsdoc/no-defaults", ERROR).addRule("jsdoc/no-multi-asterisks", ERROR, [{ allowWhitespace: true }]).addRule("jsdoc/require-asterisk-prefix", ERROR).addRule("jsdoc/require-jsdoc", OFF).addRule("jsdoc/require-param", ERROR, [{ ignoreWhenAllParamsMissing: true }]).addRule("jsdoc/require-param-description", WARNING).addRule("jsdoc/require-property-description", WARNING).addRule("jsdoc/require-returns", OFF).addRule("jsdoc/require-returns-description", WARNING).addRule("jsdoc/sort-tags", ERROR).addOverrides();
914
+ const tsBuilder = new ConfigEntryBuilder(
915
+ typeof typescriptOnlyRules === "object" ? typescriptOnlyRules : {},
916
+ internalOptions
917
+ );
918
+ if (typescriptOnlyRules) {
919
+ const pluginSettingsForTs = (typeof typescriptOnlyRules === "object" ? typescriptOnlyRules.settings : void 0) || pluginSettings;
920
+ builder.addConfig(
921
+ [
922
+ "jsdoc/ts",
923
+ {
924
+ includeDefaultFilesAndIgnores: true,
925
+ filesFallback: [GLOB_TS, GLOB_TSX]
926
+ }
927
+ ],
928
+ {
929
+ ...pluginSettingsForTs && {
930
+ settings: {
931
+ jsdoc: pluginSettingsForTs
932
+ }
933
+ }
934
+ }
935
+ ).addRule("jsdoc/no-types", ERROR).addRule("jsdoc/no-undefined-types", OFF).addRule("jsdoc/require-param-type", OFF).addRule("jsdoc/require-property-type", OFF).addRule("jsdoc/require-returns-type", OFF).addOverrides();
936
+ }
937
+ return [...builder.getAllConfigs(), ...tsBuilder.getAllConfigs()];
938
+ };
939
+
881
940
  // src/configs/jsonc.ts
882
941
  init_cjs_shims();
883
942
  var import_eslint_plugin_jsonc = __toESM(require("eslint-plugin-jsonc"), 1);
@@ -1149,6 +1208,19 @@ var packageJsonEslintConfig = (options = {}, internalOptions = {}) => {
1149
1208
  return builder.getAllConfigs();
1150
1209
  };
1151
1210
 
1211
+ // src/configs/perfectionist.ts
1212
+ init_cjs_shims();
1213
+ var import_eslint_plugin_perfectionist = __toESM(require("eslint-plugin-perfectionist"), 1);
1214
+ var perfectionistEslintConfig = (options = {}, internalOptions = {}) => {
1215
+ const builder = new ConfigEntryBuilder(options, internalOptions);
1216
+ builder.addConfig(["perfectionist", { includeDefaultFilesAndIgnores: true }], {
1217
+ plugins: {
1218
+ perfectionist: import_eslint_plugin_perfectionist.default
1219
+ }
1220
+ }).addRule("perfectionist/sort-array-includes", OFF).addRule("perfectionist/sort-classes", OFF).addRule("perfectionist/sort-decorators", OFF).addRule("perfectionist/sort-enums", OFF).addRule("perfectionist/sort-exports", OFF).addRule("perfectionist/sort-heritage-clauses", OFF).addRule("perfectionist/sort-imports", OFF).addRule("perfectionist/sort-interfaces", OFF).addRule("perfectionist/sort-intersection-types", OFF).addRule("perfectionist/sort-jsx-props", OFF).addRule("perfectionist/sort-maps", OFF).addRule("perfectionist/sort-modules", OFF).addRule("perfectionist/sort-named-exports", OFF).addRule("perfectionist/sort-named-imports", OFF).addRule("perfectionist/sort-object-types", OFF).addRule("perfectionist/sort-objects", OFF).addRule("perfectionist/sort-sets", OFF).addRule("perfectionist/sort-switch-case", OFF).addRule("perfectionist/sort-union-types", OFF).addRule("perfectionist/sort-variable-declarations", OFF).addOverrides();
1221
+ return builder.getAllConfigs();
1222
+ };
1223
+
1152
1224
  // src/configs/prefer-arrow-functions.ts
1153
1225
  init_cjs_shims();
1154
1226
  var import_eslint_plugin_prefer_arrow_functions = __toESM(require("eslint-plugin-prefer-arrow-functions"), 1);
@@ -1156,8 +1228,9 @@ var preferArrowFunctionsEslintConfig = (options = {}, internalOptions = {}) => {
1156
1228
  const builder = new ConfigEntryBuilder(options, internalOptions);
1157
1229
  builder.addConfig(["prefer-arrow-functions", { includeDefaultFilesAndIgnores: true }], {
1158
1230
  plugins: {
1231
+ // @ts-expect-error `default` does not exist, but required because the export is wrong: https://arethetypeswrong.github.io/?p=eslint-plugin-prefer-arrow-functions%403.6.0
1159
1232
  // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
1160
- "prefer-arrow-functions": import_eslint_plugin_prefer_arrow_functions.default
1233
+ "prefer-arrow-functions": import_eslint_plugin_prefer_arrow_functions.default.default
1161
1234
  }
1162
1235
  }).addRule("prefer-arrow-functions/prefer-arrow-functions", WARNING).addOverrides();
1163
1236
  return builder.getAllConfigs();
@@ -1212,13 +1285,16 @@ var securityEslintConfig = (options = {}, internalOptions = {}) => {
1212
1285
  init_cjs_shims();
1213
1286
  var import_eslint_plugin_sonarjs = __toESM(require("eslint-plugin-sonarjs"), 1);
1214
1287
  var sonarEslintConfig = (options = {}, internalOptions = {}) => {
1288
+ const { enableAwsRules = true, testsRules = true } = options;
1289
+ const awsRulesSeverity = enableAwsRules ? ERROR : OFF;
1290
+ const testsRulesSeverity = testsRules ? ERROR : OFF;
1215
1291
  const builder = new ConfigEntryBuilder(options, internalOptions);
1216
- builder.addConfig(["sonar", { includeDefaultFilesAndIgnores: true }], {
1292
+ builder.addConfig("sonar/setup", {
1217
1293
  plugins: {
1218
- // @ts-expect-error small types mismatch
1219
1294
  sonarjs: import_eslint_plugin_sonarjs.default
1220
1295
  }
1221
- }).addBulkRules(import_eslint_plugin_sonarjs.default.configs.recommended.rules).addRule("sonarjs/no-duplicate-string", OFF).addRule("sonarjs/no-nested-switch", OFF).addRule("sonarjs/no-nested-template-literals", OFF).addRule("sonarjs/no-unused-collection", OFF).addRule("sonarjs/prefer-immediate-return", OFF).addOverrides();
1296
+ });
1297
+ builder.addConfig(["sonar", { includeDefaultFilesAndIgnores: true }]).addBulkRules(import_eslint_plugin_sonarjs.default.configs.recommended.rules).addRule("sonarjs/argument-type", OFF).addRule("sonarjs/array-callback-without-return", OFF).addRule("sonarjs/assertions-in-tests", testsRulesSeverity).addRule("sonarjs/aws-apigateway-public-api", awsRulesSeverity).addRule("sonarjs/aws-ec2-rds-dms-public", awsRulesSeverity).addRule("sonarjs/aws-ec2-unencrypted-ebs-volume", awsRulesSeverity).addRule("sonarjs/aws-efs-unencrypted", awsRulesSeverity).addRule("sonarjs/aws-iam-all-privileges", awsRulesSeverity).addRule("sonarjs/aws-iam-all-resources-accessible", OFF).addRule("sonarjs/aws-iam-privilege-escalation", awsRulesSeverity).addRule("sonarjs/aws-iam-public-access", awsRulesSeverity).addRule("sonarjs/aws-opensearchservice-domain", awsRulesSeverity).addRule("sonarjs/aws-rds-unencrypted-databases", awsRulesSeverity).addRule("sonarjs/aws-restricted-ip-admin-access", awsRulesSeverity).addRule("sonarjs/aws-s3-bucket-granted-access", awsRulesSeverity).addRule("sonarjs/aws-s3-bucket-insecure-http", awsRulesSeverity).addRule("sonarjs/aws-s3-bucket-public-access", awsRulesSeverity).addRule("sonarjs/aws-s3-bucket-server-encryption", OFF).addRule("sonarjs/aws-s3-bucket-versioning", awsRulesSeverity).addRule("sonarjs/aws-sagemaker-unencrypted-notebook", awsRulesSeverity).addRule("sonarjs/aws-sns-unencrypted-topics", awsRulesSeverity).addRule("sonarjs/aws-sqs-unencrypted-queue", awsRulesSeverity).addRule("sonarjs/block-scoped-var", OFF).addRule("sonarjs/call-argument-line", OFF).addRule("sonarjs/chai-determinate-assertion", testsRulesSeverity).addRule("sonarjs/class-name", OFF).addRule("sonarjs/code-eval", OFF).addRule("sonarjs/cognitive-complexity", OFF).addRule("sonarjs/concise-regex", OFF).addRule("sonarjs/conditional-indentation", OFF).addRule("sonarjs/constructor-for-side-effects", OFF).addRule("sonarjs/deprecation", OFF).addRule("sonarjs/different-types-comparison", OFF).addRule("sonarjs/disabled-timeout", testsRulesSeverity).addRule("sonarjs/duplicates-in-character-class", OFF).addRule("sonarjs/empty-string-repetition", OFF).addRule("sonarjs/fixme-tag", OFF).addRule("sonarjs/function-inside-loop", OFF).addRule("sonarjs/function-return-type", OFF).addRule("sonarjs/generator-without-yield", OFF).addRule("sonarjs/in-operator-type-error", OFF).addRule("sonarjs/inverted-assertion-arguments", testsRulesSeverity).addRule("sonarjs/label-position", OFF).addRule("sonarjs/max-switch-cases", OFF).addRule("sonarjs/misplaced-loop-counter", WARNING).addRule("sonarjs/new-operator-misuse", OFF).addRule("sonarjs/no-alphabetical-sort", OFF).addRule("sonarjs/no-array-delete", OFF).addRule("sonarjs/no-associative-arrays", OFF).addRule("sonarjs/no-async-constructor", OFF).addRule("sonarjs/no-code-after-done", testsRulesSeverity).addRule("sonarjs/no-commented-code", OFF).addRule("sonarjs/no-control-regex", OFF).addRule("sonarjs/no-dead-store", OFF).addRule("sonarjs/no-duplicate-in-composite", OFF).addRule("sonarjs/no-empty-alternatives", OFF).addRule("sonarjs/no-empty-character-class", OFF).addRule("sonarjs/no-empty-group", OFF).addRule("sonarjs/no-empty-test-file", OFF).addRule("sonarjs/no-exclusive-tests", OFF).addRule("sonarjs/no-fallthrough", OFF).addRule("sonarjs/no-for-in-iterable", ERROR).addRule("sonarjs/no-hardcoded-ip", WARNING).addRule("sonarjs/no-identical-conditions", OFF).addRule("sonarjs/no-implicit-dependencies", OFF).addRule("sonarjs/no-incomplete-assertions", testsRulesSeverity).addRule("sonarjs/no-invalid-await", OFF).addRule("sonarjs/no-invalid-regexp", OFF).addRule("sonarjs/no-labels", OFF).addRule("sonarjs/no-misleading-character-class", OFF).addRule("sonarjs/no-nested-assignment", OFF).addRule("sonarjs/no-nested-conditional", OFF).addRule("sonarjs/no-nested-functions", OFF).addRule("sonarjs/no-nested-template-literals", OFF).addRule("sonarjs/no-one-iteration-loop", OFF).addRule("sonarjs/no-primitive-wrappers", OFF).addRule("sonarjs/no-regex-spaces", OFF).addRule("sonarjs/no-same-argument-assert", testsRulesSeverity).addRule("sonarjs/no-same-line-conditional", OFF).addRule("sonarjs/no-selector-parameter", OFF).addRule("sonarjs/no-skipped-tests", OFF).addRule("sonarjs/no-try-promise", OFF).addRule("sonarjs/no-unenclosed-multiline-block", OFF).addRule("sonarjs/no-unthrown-error", OFF).addRule("sonarjs/no-unused-vars", OFF).addRule("sonarjs/no-useless-catch", OFF).addRule("sonarjs/no-useless-intersection", OFF).addRule("sonarjs/no-vue-bypass-sanitization", OFF).addRule("sonarjs/null-dereference", OFF).addRule("sonarjs/prefer-default-last", OFF).addRule("sonarjs/prefer-object-literal", ERROR).addRule("sonarjs/prefer-read-only-props", OFF).addRule("sonarjs/prefer-regexp-exec", OFF).addRule("sonarjs/production-debug", ERROR).addRule("sonarjs/pseudo-random", OFF).addRule("sonarjs/redundant-type-aliases", OFF).addRule("sonarjs/regex-complexity", WARNING, [{ threshold: 40 }]).addRule("sonarjs/single-char-in-character-classes", OFF).addRule("sonarjs/single-character-alternation", OFF).addRule("sonarjs/slow-regex", OFF).addRule("sonarjs/stable-tests", testsRulesSeverity).addRule("sonarjs/strings-comparison", WARNING).addRule("sonarjs/super-invocation", OFF).addRule("sonarjs/table-header", WARNING).addRule("sonarjs/table-header-reference", WARNING).addRule("sonarjs/todo-tag", OFF).addRule("sonarjs/unused-import", OFF).addRule("sonarjs/unverified-hostname", ERROR).addRule("sonarjs/updated-const-var", OFF).addRule("sonarjs/updated-loop-counter", WARNING).addRule("sonarjs/use-type-alias", WARNING).addRule("sonarjs/void-use", OFF).addOverrides();
1222
1298
  return builder.getAllConfigs();
1223
1299
  };
1224
1300
 
@@ -1454,7 +1530,7 @@ var tsEslintConfig = (options = {}, internalOptions = {}) => {
1454
1530
  }).addAnyRule("constructor-super", OFF).addAnyRule("getter-return", OFF).addAnyRule("no-const-assign", OFF).addAnyRule("no-dupe-args", OFF).addAnyRule("no-dupe-class-members", OFF).addAnyRule("no-dupe-keys", OFF).addAnyRule("no-func-assign", OFF).addAnyRule("no-new-native-nonconstructor", OFF).addAnyRule("no-obj-calls", OFF).addAnyRule("no-setter-return", OFF).addAnyRule("no-this-before-super", OFF).addAnyRule("no-undef", OFF).addAnyRule("no-unsafe-negation", OFF).addAnyRule("no-duplicate-imports", OFF);
1455
1531
  builder.addConfig("ts/dts", {
1456
1532
  files: ["**/*.d.?([cm])ts"]
1457
- }).addRule("@typescript-eslint/consistent-indexed-object-style", OFF).addRule("@typescript-eslint/method-signature-style", OFF).addRule("@typescript-eslint/no-empty-object-type", OFF).addRule("@typescript-eslint/no-explicit-any", OFF).addRule("@typescript-eslint/no-shadow", OFF).addRule("@typescript-eslint/no-unnecessary-type-parameters", OFF).addRule("@typescript-eslint/no-unused-vars", OFF).addRule("@typescript-eslint/no-use-before-define", OFF).addAnyRule("import/newline-after-import", OFF).addAnyRule("import/no-default-export", OFF);
1533
+ }).addRule("@typescript-eslint/consistent-indexed-object-style", OFF).addRule("@typescript-eslint/method-signature-style", OFF).addRule("@typescript-eslint/no-empty-object-type", OFF).addRule("@typescript-eslint/no-explicit-any", OFF).addRule("@typescript-eslint/no-shadow", OFF).addRule("@typescript-eslint/no-unnecessary-type-parameters", OFF).addRule("@typescript-eslint/no-unused-vars", OFF).addRule("@typescript-eslint/no-use-before-define", OFF).addAnyRule("import/newline-after-import", OFF).addAnyRule("import/no-default-export", OFF).addAnyRule("vars-on-top", OFF).addAnyRule("no-var", OFF).addAnyRule("sonarjs/no-redundant-optional", OFF);
1458
1534
  if (options.noTypeAssertion) {
1459
1535
  builder.addConfig("ts/no-type-assertion", {
1460
1536
  plugins: {
@@ -1620,7 +1696,8 @@ var vueEslintConfig = (options, internalOptions = {}) => {
1620
1696
  const isLess2_6 = isVue2 && vueMajorAndMinorVersion < 2.6;
1621
1697
  const isLess3_1 = vueMajorAndMinorVersion < 3.1;
1622
1698
  const isNuxtEnabled = Boolean(options.nuxtMajorVersion);
1623
- const recommendedRules = import_eslint_plugin_vue.default.configs[isVue3 ? "flat/recommended" : "flat/vue2-recommended"].reduce((result, config) => Object.assign(result, config.rules), {});
1699
+ const recommendedRulesRaw = import_eslint_plugin_vue.default.configs[isVue3 ? "flat/recommended" : "flat/vue2-recommended"].reduce((result, config) => Object.assign(result, config.rules), {});
1700
+ const recommendedRules = bulkChangeRuleSeverity(recommendedRulesRaw, ERROR);
1624
1701
  const inNuxtAppDir = joinPaths.bind(null, options.nuxtOrVueProjectDir);
1625
1702
  const nuxtLayoutsFilesGlob = inNuxtAppDir("layouts/**/*.vue");
1626
1703
  const builder = new ConfigEntryBuilder(options, internalOptions);
@@ -1967,6 +2044,10 @@ var eslintConfig = (options = {}) => {
1967
2044
  const vitestOptions = {
1968
2045
  ...assignOptions(configsOptions, "vitest")
1969
2046
  };
2047
+ const isJsdocEnabled = Boolean(configsOptions.jsdoc ?? true);
2048
+ const jsdocOptions = {
2049
+ ...assignOptions(configsOptions, "jsdoc")
2050
+ };
1970
2051
  const isSecurityEnabled = Boolean(configsOptions.security ?? false);
1971
2052
  const securityOptions = {
1972
2053
  ...assignOptions(configsOptions, "security")
@@ -1991,6 +2072,10 @@ var eslintConfig = (options = {}) => {
1991
2072
  const packageJsonOptions = {
1992
2073
  ...assignOptions(configsOptions, "packageJson")
1993
2074
  };
2075
+ const isPerfectionistEnabled = Boolean(configsOptions.perfectionist ?? false);
2076
+ const perfectionistOptions = {
2077
+ ...assignOptions(configsOptions, "perfectionist")
2078
+ };
1994
2079
  const internalOptions = {
1995
2080
  globalOptions: options,
1996
2081
  isTypescriptEnabled,
@@ -2041,12 +2126,14 @@ var eslintConfig = (options = {}) => {
2041
2126
  isCssInJsEnabled && cssInJsEslintConfig(cssInJsOptions, internalOptions),
2042
2127
  isJestEnabled && jestEslintConfig(jestOptions, internalOptions),
2043
2128
  isVitestEnabled && vitestEslintConfig(vitestOptions, internalOptions),
2129
+ isJsdocEnabled && jsdocEslintConfig(jsdocOptions, internalOptions),
2044
2130
  isSecurityEnabled && securityEslintConfig(securityOptions, internalOptions),
2045
2131
  isPreferArrowFunctionsEnabled && preferArrowFunctionsEslintConfig(preferArrowFunctionsOptions, internalOptions),
2046
2132
  isYamlEnabled && yamlEslintConfig(yamlOptions, internalOptions),
2047
2133
  isTomlEnabled && tomlEslintConfig(tomlOptions, internalOptions),
2048
2134
  isJsoncEnabled && jsoncEslintConfig(jsoncOptions, internalOptions),
2049
2135
  isPackageJsonEnabled && packageJsonEslintConfig(packageJsonOptions, internalOptions),
2136
+ isPerfectionistEnabled && perfectionistEslintConfig(perfectionistOptions, internalOptions),
2050
2137
  isTypescriptEnabled && tsEslintConfig(tsOptions, internalOptions),
2051
2138
  // Must come after all rulesets for vanilla JS
2052
2139
  isVueEnabled && vueEslintConfig(vueOptions, internalOptions),
@@ -2057,11 +2144,24 @@ var eslintConfig = (options = {}) => {
2057
2144
  name: genFlatConfigEntryName("config-files"),
2058
2145
  files: GLOB_CONFIG_FILES,
2059
2146
  rules: {
2060
- "import/no-default-export": OFF,
2061
2147
  "import/no-extraneous-dependencies": OFF,
2062
2148
  "n/no-unpublished-require": OFF
2063
2149
  }
2064
2150
  },
2151
+ {
2152
+ name: genFlatConfigEntryName("allow-default-export"),
2153
+ files: [
2154
+ ...GLOB_CONFIG_FILES,
2155
+ // Files starting with a dot
2156
+ `**/.*.${GLOB_JS_TS_X_EXTENSION}`,
2157
+ // Storybook
2158
+ `**/*.stories.${GLOB_JS_TS_X_EXTENSION}`,
2159
+ ".storybook/**/*"
2160
+ ],
2161
+ rules: {
2162
+ "import/no-default-export": OFF
2163
+ }
2164
+ },
2065
2165
  ...options.extraConfigs || [],
2066
2166
  // MUST be last
2067
2167
  !options.disablePrettierIncompatibleRules && {