@storm-software/eslint 0.87.2 → 0.87.3

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
@@ -21,7 +21,7 @@ This package is part of the <b>⚡Storm-Ops</b> monorepo. The Storm-Ops packages
21
21
 
22
22
  <h3 align="center">💻 Visit <a href="https://stormsoftware.com" target="_blank">stormsoftware.com</a> to stay up to date with this developer</h3><br />
23
23
 
24
- [![Version](https://img.shields.io/badge/version-0.87.1-1fb2a6.svg?style=for-the-badge&color=1fb2a6)](https://prettier.io/)&nbsp;[![Nx](https://img.shields.io/badge/Nx-17.0.2-lightgrey?style=for-the-badge&logo=nx&logoWidth=20&&color=1fb2a6)](http://nx.dev/)&nbsp;[![NextJs](https://img.shields.io/badge/Next.js-14.0.2-lightgrey?style=for-the-badge&logo=nextdotjs&logoWidth=20&color=1fb2a6)](https://nextjs.org/)&nbsp;[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg?style=for-the-badge&logo=commitlint&color=1fb2a6)](http://commitizen.github.io/cz-cli/)&nbsp;![Semantic-Release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg?style=for-the-badge&color=1fb2a6)&nbsp;[![documented with Fumadocs](https://img.shields.io/badge/documented_with-fumadocs-success.svg?style=for-the-badge&logo=readthedocs&color=1fb2a6)](https://fumadocs.vercel.app/)&nbsp;![GitHub Workflow Status (with event)](https://img.shields.io/github/actions/workflow/status/storm-software/storm-ops/cr.yml?style=for-the-badge&logo=github-actions&color=1fb2a6)
24
+ [![Version](https://img.shields.io/badge/version-0.87.2-1fb2a6.svg?style=for-the-badge&color=1fb2a6)](https://prettier.io/)&nbsp;[![Nx](https://img.shields.io/badge/Nx-17.0.2-lightgrey?style=for-the-badge&logo=nx&logoWidth=20&&color=1fb2a6)](http://nx.dev/)&nbsp;[![NextJs](https://img.shields.io/badge/Next.js-14.0.2-lightgrey?style=for-the-badge&logo=nextdotjs&logoWidth=20&color=1fb2a6)](https://nextjs.org/)&nbsp;[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg?style=for-the-badge&logo=commitlint&color=1fb2a6)](http://commitizen.github.io/cz-cli/)&nbsp;![Semantic-Release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg?style=for-the-badge&color=1fb2a6)&nbsp;[![documented with Fumadocs](https://img.shields.io/badge/documented_with-fumadocs-success.svg?style=for-the-badge&logo=readthedocs&color=1fb2a6)](https://fumadocs.vercel.app/)&nbsp;![GitHub Workflow Status (with event)](https://img.shields.io/github/actions/workflow/status/storm-software/storm-ops/cr.yml?style=for-the-badge&logo=github-actions&color=1fb2a6)
25
25
 
26
26
  <!-- prettier-ignore-start -->
27
27
  <!-- markdownlint-disable -->
package/dist/preset.d.mts CHANGED
@@ -7010,6 +7010,7 @@ type TypeScriptEslintConfigType = "none" | "all" | "base" | "disable-type-checke
7010
7010
  interface GetStormRulesConfigOptions {
7011
7011
  typescriptEslintConfigType?: TypeScriptEslintConfigType;
7012
7012
  useUnicorn?: boolean;
7013
+ useNx?: boolean;
7013
7014
  }
7014
7015
 
7015
7016
  /**
@@ -7040,8 +7041,10 @@ type PresetOptions = GetStormRulesConfigOptions & {
7040
7041
  parserOptions?: Linter.ParserOptions;
7041
7042
  markdown?: false | Linter.RulesRecord;
7042
7043
  react?: false | Linter.RulesRecord;
7044
+ nx?: false | Linter.RulesRecord;
7043
7045
  useReactCompiler?: boolean;
7044
7046
  nextFiles?: string[];
7047
+ logLevel?: "all" | "trace" | "debug" | "info" | "warn" | "error" | "fatal" | "silent";
7045
7048
  };
7046
7049
  /**
7047
7050
  * Get the ESLint configuration for a Storm workspace.
package/dist/preset.d.ts CHANGED
@@ -7010,6 +7010,7 @@ type TypeScriptEslintConfigType = "none" | "all" | "base" | "disable-type-checke
7010
7010
  interface GetStormRulesConfigOptions {
7011
7011
  typescriptEslintConfigType?: TypeScriptEslintConfigType;
7012
7012
  useUnicorn?: boolean;
7013
+ useNx?: boolean;
7013
7014
  }
7014
7015
 
7015
7016
  /**
@@ -7040,8 +7041,10 @@ type PresetOptions = GetStormRulesConfigOptions & {
7040
7041
  parserOptions?: Linter.ParserOptions;
7041
7042
  markdown?: false | Linter.RulesRecord;
7042
7043
  react?: false | Linter.RulesRecord;
7044
+ nx?: false | Linter.RulesRecord;
7043
7045
  useReactCompiler?: boolean;
7044
7046
  nextFiles?: string[];
7047
+ logLevel?: "all" | "trace" | "debug" | "info" | "warn" | "error" | "fatal" | "silent";
7045
7048
  };
7046
7049
  /**
7047
7050
  * Get the ESLint configuration for a Storm workspace.
package/dist/preset.mjs CHANGED
@@ -17,7 +17,7 @@ import tsdoc from 'eslint-plugin-tsdoc';
17
17
  import unicorn from 'eslint-plugin-unicorn';
18
18
  import yml from 'eslint-plugin-yml';
19
19
  import globals from 'globals';
20
- import { writeInfo, writeDebug } from '@storm-software/config-tools';
20
+ import { writeInfo, writeDebug, formatLogMessage, writeFatal, writeError } from '@storm-software/config-tools';
21
21
  import { defu } from 'defu';
22
22
  import tsEslint$1 from 'typescript-eslint';
23
23
  import require$$0 from 'eslint/use-at-your-own-risk';
@@ -1279,26 +1279,7 @@ const getStormRulesConfig = (options) => {
1279
1279
  "unicode-bom": ["error", "never"],
1280
1280
  // require regex literals to be wrapped in parentheses
1281
1281
  "wrap-regex": "off",
1282
- "class-methods-use-this": "off",
1283
- /*************************************************************
1284
- *
1285
- * Nx Rules - The following rules are specific to the Nx plugin
1286
- *
1287
- **************************************************************/
1288
- "@nx/enforce-module-boundaries": [
1289
- "error",
1290
- {
1291
- enforceBuildableLibDependency: true,
1292
- checkDynamicDependenciesExceptions: [".*"],
1293
- allow: [],
1294
- depConstraints: [
1295
- {
1296
- sourceTag: "*",
1297
- onlyDependOnLibsWithTags: ["*"]
1298
- }
1299
- ]
1300
- }
1301
- ]
1282
+ "class-methods-use-this": "off"
1302
1283
  };
1303
1284
  if (options.typescriptEslintConfigType !== "none") {
1304
1285
  rules = {
@@ -1352,6 +1333,30 @@ const getStormRulesConfig = (options) => {
1352
1333
  ]
1353
1334
  };
1354
1335
  }
1336
+ if (options.useNx !== false) {
1337
+ rules = {
1338
+ ...rules,
1339
+ /*************************************************************
1340
+ *
1341
+ * Nx Rules - The following rules are specific to the Nx plugin
1342
+ *
1343
+ **************************************************************/
1344
+ "@nx/enforce-module-boundaries": [
1345
+ "error",
1346
+ {
1347
+ enforceBuildableLibDependency: true,
1348
+ checkDynamicDependenciesExceptions: [".*"],
1349
+ allow: [],
1350
+ depConstraints: [
1351
+ {
1352
+ sourceTag: "*",
1353
+ onlyDependOnLibsWithTags: ["*"]
1354
+ }
1355
+ ]
1356
+ }
1357
+ ]
1358
+ };
1359
+ }
1355
1360
  if (options.useUnicorn !== false) {
1356
1361
  rules = {
1357
1362
  ...rules,
@@ -12920,267 +12925,288 @@ const ignores = [
12920
12925
  function getStormConfig(options = {
12921
12926
  rules: {},
12922
12927
  ignores: [],
12923
- tsconfig: "./tsconfig.base.json",
12924
- parserOptions: {},
12925
12928
  typescriptEslintConfigType: "eslint-recommended",
12926
12929
  useUnicorn: true,
12927
12930
  markdown: {},
12928
12931
  react: {},
12929
- useReactCompiler: false
12932
+ nx: {},
12933
+ useReactCompiler: false,
12934
+ logLevel: "info"
12930
12935
  }, ...userConfigs) {
12931
- const tsconfig = options.tsconfig ?? "./tsconfig.base.json";
12936
+ var _a;
12937
+ const tsconfig = options.tsconfig;
12938
+ const parserOptions = options.parserOptions;
12932
12939
  const typescriptEslintConfigType = options.typescriptEslintConfigType || "eslint-recommended";
12933
12940
  const useUnicorn = options.useUnicorn ?? true;
12934
12941
  const react = options.react ?? {};
12942
+ const nx = options.nx ?? {};
12935
12943
  const useReactCompiler = options.useReactCompiler ?? false;
12936
- const configs = [
12937
- // Prettier
12938
- prettierConfig,
12939
- // Import
12940
- // https://www.npmjs.com/package/eslint-plugin-import
12941
- // { plugins: { import: importEslint } },
12942
- // {
12943
- // files: [CODE_FILE],
12944
- // rules: importRules
12945
- // },
12946
- // bannerConfig,
12947
- // NX
12948
- {
12949
- plugins: { "@nx": nxPlugin }
12950
- },
12951
- // Json
12952
- // https://www.npmjs.com/package/eslint-plugin-json
12953
- {
12954
- files: ["**/*.json"],
12955
- ...json.configs["recommended"],
12956
- rules: {
12957
- "json/json": ["warn", { "allowComments": true }]
12958
- }
12959
- },
12960
- {
12961
- files: ["**/executors/**/schema.json", "**/generators/**/schema.json"],
12962
- rules: {
12963
- "@nx/workspace/valid-schema-description": "error"
12964
- }
12965
- },
12966
- {
12967
- files: ["**/package.json"],
12968
- rules: {
12969
- "@nx/dependency-checks": [
12970
- "error",
12971
- {
12972
- buildTargets: ["build"],
12973
- ignoredDependencies: ["typescript"],
12974
- ignoredFiles: [],
12975
- checkMissingDependencies: true,
12976
- checkObsoleteDependencies: true,
12977
- checkVersionMismatches: false,
12978
- includeTransitiveDependencies: true,
12979
- useLocalPathsForWorkspaceDependencies: true
12980
- }
12981
- ]
12982
- }
12983
- },
12984
- // YML
12985
- // https://www.npmjs.com/package/eslint-plugin-yml
12986
- ...yml.configs["flat/recommended"],
12987
- ...yml.configs["flat/prettier"],
12988
- // CSpell
12989
- {
12990
- plugins: {
12991
- ...plugins
12944
+ const logLevel = options.logLevel ?? "info";
12945
+ try {
12946
+ const configs = [
12947
+ // Prettier
12948
+ prettierConfig,
12949
+ // Import
12950
+ // https://www.npmjs.com/package/eslint-plugin-import
12951
+ // { plugins: { import: importEslint } },
12952
+ // {
12953
+ // files: [CODE_FILE],
12954
+ // rules: importRules
12955
+ // },
12956
+ // bannerConfig,
12957
+ // Json
12958
+ // https://www.npmjs.com/package/eslint-plugin-json
12959
+ {
12960
+ files: ["**/*.json"],
12961
+ ...json.configs["recommended"],
12962
+ rules: {
12963
+ "json/json": ["warn", { "allowComments": true }]
12964
+ }
12965
+ },
12966
+ {
12967
+ files: ["**/executors/**/schema.json", "**/generators/**/schema.json"],
12968
+ rules: nx !== false ? {
12969
+ "@nx/workspace/valid-schema-description": "error"
12970
+ } : {}
12992
12971
  },
12993
- rules: {
12994
- ...rules,
12995
- "@cspell/spellchecker": [
12996
- "warn",
12997
- {
12998
- // configFile: new URL(
12999
- // "./.vscode/cspell.json",
13000
- // import.meta.url
13001
- // ).toString(),
13002
- autoFix: true
13003
- }
13004
- ]
13005
- }
13006
- },
13007
- // User overrides
13008
- ...userConfigs
13009
- ].filter(Boolean);
13010
- configs.push(eslint.configs.recommended);
13011
- if (typescriptEslintConfigType !== "none") {
13012
- if (!(typescriptEslintConfigType in tsEslint$1.configs)) {
13013
- console.warn(
13014
- "Invalid TypeScript ESLint configuration type:",
13015
- typescriptEslintConfigType
13016
- );
13017
- } else {
13018
- configs.push(
13019
- ...Array.isArray(tsEslint$1.configs[typescriptEslintConfigType]) ? tsEslint$1.configs[typescriptEslintConfigType] : [tsEslint$1.configs[typescriptEslintConfigType]]
13020
- );
13021
- }
13022
- }
13023
- if (useUnicorn) {
13024
- configs.push({
13025
- files: [TS_FILE],
13026
- plugins: { unicorn },
13027
- rules: {
13028
- ...unicorn.configs["flat/recommended"].rules
13029
- }
13030
- });
13031
- }
13032
- configs.push({
13033
- files: [TS_FILE],
13034
- plugins: { tsdoc },
13035
- rules: config
13036
- });
13037
- configs.push({
13038
- // ...banner.configs!["recommended"],
13039
- name: "banner",
13040
- plugins: { banner: plugin },
13041
- files: [TS_FILE],
13042
- rules: {
13043
- "banner/banner": [
13044
- "error",
13045
- { commentType: "block", numNewlines: 2, repositoryName: options.name }
13046
- ]
13047
- }
13048
- });
13049
- if (react) {
13050
- const reactConfigs = [
13051
12972
  {
13052
- ...reactPlugin.configs?.recommended,
13053
- plugins: { "react": reactPlugin },
13054
- files: ["**/*.tsx"],
13055
- languageOptions: {
13056
- parserOptions: {
13057
- ecmaFeatures: {
13058
- jsx: true
12973
+ files: ["**/package.json"],
12974
+ rules: nx !== false ? {
12975
+ "@nx/dependency-checks": [
12976
+ "error",
12977
+ {
12978
+ buildTargets: ["build"],
12979
+ ignoredDependencies: ["typescript"],
12980
+ ignoredFiles: options.ignores,
12981
+ checkMissingDependencies: true,
12982
+ checkObsoleteDependencies: true,
12983
+ checkVersionMismatches: false,
12984
+ includeTransitiveDependencies: true,
12985
+ useLocalPathsForWorkspaceDependencies: true
13059
12986
  }
13060
- }
13061
- },
13062
- ignores: [...ignores, ...options.ignores || []],
13063
- ...react
12987
+ ]
12988
+ } : {}
13064
12989
  },
12990
+ // YML
12991
+ // https://www.npmjs.com/package/eslint-plugin-yml
12992
+ ...yml.configs["flat/recommended"],
12993
+ ...yml.configs["flat/prettier"],
12994
+ // CSpell
13065
12995
  {
13066
- ...reactHooks.configs?.recommended,
13067
- plugins: { "react-hooks": reactHooks },
13068
- files: [TS_FILE],
13069
- ignores: [...ignores, ...options.ignores || []]
13070
- }
13071
- // {
13072
- // files: ["**/*.{js,mjs,cjs,jsx,mjsx,ts,tsx,mtsx}"],
13073
- // ...jsxA11y.flatConfigs?.recommended
13074
- // }
13075
- ];
13076
- if (useReactCompiler) {
13077
- reactConfigs.push({
13078
- files: ["**/*.tsx"],
13079
- ignores: [...ignores, ...options.ignores || []],
13080
12996
  plugins: {
13081
- "react-compiler": reactCompiler
12997
+ ...plugins
13082
12998
  },
13083
12999
  rules: {
13084
- "react-compiler/react-compiler": "error"
13000
+ ...rules,
13001
+ "@cspell/spellchecker": [
13002
+ "warn",
13003
+ {
13004
+ // configFile: new URL(
13005
+ // "./.vscode/cspell.json",
13006
+ // import.meta.url
13007
+ // ).toString(),
13008
+ autoFix: true
13009
+ }
13010
+ ]
13011
+ }
13012
+ },
13013
+ // User overrides
13014
+ ...userConfigs
13015
+ ].filter(Boolean);
13016
+ if (nx) {
13017
+ configs.push({
13018
+ plugins: { "@nx": nxPlugin }
13019
+ });
13020
+ }
13021
+ configs.push(eslint.configs.recommended);
13022
+ if (typescriptEslintConfigType !== "none") {
13023
+ if (!(typescriptEslintConfigType in tsEslint$1.configs)) {
13024
+ console.warn(
13025
+ "Invalid TypeScript ESLint configuration type:",
13026
+ typescriptEslintConfigType
13027
+ );
13028
+ } else {
13029
+ configs.push(
13030
+ ...Array.isArray(tsEslint$1.configs[typescriptEslintConfigType]) ? tsEslint$1.configs[typescriptEslintConfigType] : [tsEslint$1.configs[typescriptEslintConfigType]]
13031
+ );
13032
+ }
13033
+ }
13034
+ if (useUnicorn) {
13035
+ configs.push({
13036
+ files: [TS_FILE],
13037
+ plugins: { unicorn },
13038
+ rules: {
13039
+ ...unicorn.configs["flat/recommended"].rules
13085
13040
  }
13086
13041
  });
13087
13042
  }
13088
- configs.push(...reactConfigs);
13089
- }
13090
- if (options.nextFiles && options.nextFiles.length > 0) {
13091
13043
  configs.push({
13092
- ...next.configs["core-web-vitals"],
13093
- ignores: [...options.ignores || []],
13094
- files: options.nextFiles
13044
+ files: [TS_FILE],
13045
+ plugins: { tsdoc },
13046
+ rules: config
13095
13047
  });
13096
- }
13097
- configs.push({
13098
- files: [TS_FILE],
13099
- languageOptions: {
13100
- sourceType: "module",
13101
- ecmaVersion: "latest",
13102
- globals: {
13103
- ...Object.fromEntries(
13104
- Object.keys(globals).flatMap(
13105
- (group) => Object.keys(globals[group]).map((key) => [
13106
- key,
13107
- "readonly"
13108
- ])
13109
- )
13110
- ),
13111
- ...globals.browser,
13112
- ...globals.node,
13113
- "window": "readonly",
13114
- "Storm": "readonly"
13115
- },
13116
- parserOptions: {
13117
- project: tsconfig,
13118
- ...options.parserOptions
13119
- }
13120
- },
13121
- rules: {
13122
- ...getStormRulesConfig({
13123
- ...options,
13124
- typescriptEslintConfigType,
13125
- useUnicorn
13126
- }),
13127
- ...options.rules ?? {}
13128
- },
13129
- ignores: [...ignores, ...options.ignores || []]
13130
- });
13131
- if (options.markdown) {
13132
- configs.push(...markdown.configs.recommended);
13133
13048
  configs.push({
13134
- files: [CODE_BLOCK],
13135
- processor: "markdown/markdown",
13049
+ // ...banner.configs!["recommended"],
13050
+ name: "banner",
13051
+ plugins: { banner: plugin },
13052
+ files: [TS_FILE],
13136
13053
  rules: {
13137
- "unicorn/filename-case": "off",
13138
- "no-undef": "off",
13139
- "no-unused-expressions": "off",
13140
- "padded-blocks": "off",
13141
- "no-empty-pattern": "off",
13142
- "no-redeclare": "off",
13143
- "no-import-assign": "off",
13144
- ...options.markdown
13054
+ "banner/banner": [
13055
+ "error",
13056
+ { commentType: "block", numNewlines: 2, repositoryName: options.name }
13057
+ ]
13145
13058
  }
13146
13059
  });
13147
- configs.push({
13148
- files: ["**/*.md/*.js", "**/*.md/*.ts"],
13149
- rules: {
13150
- "unicorn/filename-case": "off",
13151
- "no-undef": "off",
13152
- "no-unused-expressions": "off",
13153
- "padded-blocks": "off",
13154
- "no-empty-pattern": "off",
13155
- "no-redeclare": "off",
13156
- "no-import-assign": "off",
13157
- ...options.markdown
13060
+ if (react) {
13061
+ const reactConfigs = [
13062
+ {
13063
+ ...reactPlugin.configs?.recommended,
13064
+ plugins: { "react": reactPlugin },
13065
+ files: ["**/*.tsx"],
13066
+ languageOptions: {
13067
+ parserOptions: {
13068
+ ecmaFeatures: {
13069
+ jsx: true
13070
+ }
13071
+ }
13072
+ },
13073
+ ignores: [...ignores, ...options.ignores || []],
13074
+ ...react
13075
+ },
13076
+ {
13077
+ ...reactHooks.configs?.recommended,
13078
+ plugins: { "react-hooks": reactHooks },
13079
+ files: [TS_FILE],
13080
+ ignores: [...ignores, ...options.ignores || []]
13081
+ }
13082
+ // {
13083
+ // files: ["**/*.{js,mjs,cjs,jsx,mjsx,ts,tsx,mtsx}"],
13084
+ // ...jsxA11y.flatConfigs?.recommended
13085
+ // }
13086
+ ];
13087
+ if (useReactCompiler) {
13088
+ reactConfigs.push({
13089
+ files: ["**/*.tsx"],
13090
+ ignores: [...ignores, ...options.ignores || []],
13091
+ plugins: {
13092
+ "react-compiler": reactCompiler
13093
+ },
13094
+ rules: {
13095
+ "react-compiler/react-compiler": "error"
13096
+ }
13097
+ });
13158
13098
  }
13099
+ configs.push(...reactConfigs);
13100
+ }
13101
+ if (options.nextFiles && options.nextFiles.length > 0) {
13102
+ configs.push({
13103
+ ...next.configs["core-web-vitals"],
13104
+ ignores: [...options.ignores || []],
13105
+ files: options.nextFiles
13106
+ });
13107
+ }
13108
+ const typescriptConfig = {
13109
+ files: [TS_FILE],
13110
+ languageOptions: {
13111
+ globals: {
13112
+ ...Object.fromEntries(
13113
+ Object.keys(globals).flatMap(
13114
+ (group) => Object.keys(globals[group]).map((key) => [
13115
+ key,
13116
+ "readonly"
13117
+ ])
13118
+ )
13119
+ ),
13120
+ ...globals.browser,
13121
+ ...globals.node,
13122
+ "window": "readonly",
13123
+ "Storm": "readonly"
13124
+ }
13125
+ },
13126
+ rules: {
13127
+ ...getStormRulesConfig({
13128
+ ...options,
13129
+ typescriptEslintConfigType,
13130
+ useUnicorn,
13131
+ useNx: nx !== false
13132
+ }),
13133
+ ...Object.keys(options.rules ?? {}).filter(
13134
+ (ruleId) => !useUnicorn || !ruleId.startsWith("unicorn/") || !react || !ruleId.startsWith("react/") && !ruleId.startsWith("react-hooks/")
13135
+ ).reduce((ret, ruleId) => {
13136
+ ret[ruleId] = options.rules[ruleId];
13137
+ return ret;
13138
+ }, {})
13139
+ },
13140
+ ignores: [...ignores, ...options.ignores || []]
13141
+ };
13142
+ if (parserOptions) {
13143
+ typescriptConfig.languageOptions ?? (typescriptConfig.languageOptions = {});
13144
+ typescriptConfig.languageOptions.parserOptions = parserOptions;
13145
+ }
13146
+ if (tsconfig) {
13147
+ typescriptConfig.languageOptions ?? (typescriptConfig.languageOptions = {});
13148
+ (_a = typescriptConfig.languageOptions).parserOptions ?? (_a.parserOptions = {});
13149
+ typescriptConfig.languageOptions.parserOptions.project = tsconfig;
13150
+ }
13151
+ configs.push(typescriptConfig);
13152
+ if (options.markdown) {
13153
+ configs.push(...markdown.configs.recommended);
13154
+ configs.push({
13155
+ files: [CODE_BLOCK],
13156
+ processor: "markdown/markdown",
13157
+ rules: {
13158
+ "unicorn/filename-case": "off",
13159
+ "no-undef": "off",
13160
+ "no-unused-expressions": "off",
13161
+ "padded-blocks": "off",
13162
+ "no-empty-pattern": "off",
13163
+ "no-redeclare": "off",
13164
+ "no-import-assign": "off",
13165
+ ...options.markdown
13166
+ }
13167
+ });
13168
+ configs.push({
13169
+ files: ["**/*.md/*.js", "**/*.md/*.ts"],
13170
+ rules: {
13171
+ "unicorn/filename-case": "off",
13172
+ "no-undef": "off",
13173
+ "no-unused-expressions": "off",
13174
+ "padded-blocks": "off",
13175
+ "no-empty-pattern": "off",
13176
+ "no-redeclare": "off",
13177
+ "no-import-assign": "off",
13178
+ ...options.markdown
13179
+ }
13180
+ });
13181
+ }
13182
+ const result = formatConfig(
13183
+ "Preset",
13184
+ configs.reduce((ret, config) => {
13185
+ const existingIndex = ret.findIndex(
13186
+ (existing) => areFilesEqual(existing.files, config.files)
13187
+ );
13188
+ if (existingIndex >= 0) {
13189
+ ret[existingIndex] = defu(ret[existingIndex], config);
13190
+ } else {
13191
+ ret.push(config);
13192
+ }
13193
+ return ret;
13194
+ }, [])
13195
+ );
13196
+ writeInfo("\u2699\uFE0F Completed generated Storm ESLint configuration objects", {
13197
+ logLevel
13159
13198
  });
13199
+ writeDebug(formatLogMessage(result, { skip: ["globals"] }), {
13200
+ logLevel
13201
+ });
13202
+ return result;
13203
+ } catch (error) {
13204
+ writeFatal("Error generating Storm ESLint configuration objects", {
13205
+ logLevel
13206
+ });
13207
+ writeError(error, { logLevel });
13208
+ throw error;
13160
13209
  }
13161
- writeInfo("\u2699\uFE0F Merging generated Storm ESLint configuration objects", {
13162
- logLevel: "all"
13163
- });
13164
- writeDebug(configs, { logLevel: "all" });
13165
- const result = formatConfig(
13166
- "Preset",
13167
- configs.reduce((ret, config) => {
13168
- const existingIndex = ret.findIndex(
13169
- (existing) => areFilesEqual(existing.files, config.files)
13170
- );
13171
- if (existingIndex >= 0) {
13172
- ret[existingIndex] = defu(ret[existingIndex], config);
13173
- } else {
13174
- ret.push(config);
13175
- }
13176
- return ret;
13177
- }, [])
13178
- );
13179
- writeInfo("\u2699\uFE0F Completed generated Storm ESLint configuration objects", {
13180
- logLevel: "all"
13181
- });
13182
- writeDebug(result, { logLevel: "all" });
13183
- return result;
13184
13210
  }
13185
13211
  const areFilesEqual = (files1, files2) => {
13186
13212
  if (files1 === files2) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@storm-software/eslint",
3
- "version": "0.87.2",
3
+ "version": "0.87.3",
4
4
  "type": "module",
5
5
  "description": "⚡ A package containing the base ESLint configuration used by Storm Software across many projects.",
6
6
  "repository": {