@ncontiero/eslint-config 8.0.0-beta.1 → 8.0.0-beta.2

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
@@ -16375,7 +16375,7 @@ type Yoda = [] | [("always" | "never")] | [("always" | "never"), {
16375
16375
  exceptRange?: boolean;
16376
16376
  onlyEquality?: boolean;
16377
16377
  }]; // Names of all the configs
16378
- type ConfigNames = 'ncontiero/gitignore' | 'ncontiero/global-ignores' | 'ncontiero/javascript/rules' | 'ncontiero/javascript/cli-rules' | 'ncontiero/javascript/test-rules' | 'ncontiero/comments/rules' | 'ncontiero/jsdoc/setup' | 'ncontiero/jsdoc/rules' | 'ncontiero/imports/rules' | 'ncontiero/imports/allow-default-export' | 'ncontiero/node/setup' | 'ncontiero/node/rules' | 'ncontiero/promise/setup' | 'ncontiero/promise/rules' | 'ncontiero/command/rules' | 'ncontiero/perfectionist/rules' | 'ncontiero/de-morgan' | 'ncontiero/unicorn/rules' | 'ncontiero/typescript/setup' | 'ncontiero/typescript/parser' | 'ncontiero/typescript/rules' | 'ncontiero/typescript/dts-rules' | 'ncontiero/typescript/cjs-rules' | 'ncontiero/jsonc/recommended' | 'ncontiero/jsonc/recommended' | 'ncontiero/jsonc/recommended' | 'ncontiero/jsonc/rules' | 'ncontiero/sort/package-json' | 'ncontiero/sort/tsconfig' | 'ncontiero/yml/setup' | 'ncontiero/yml/rules' | 'ncontiero/yml/pnpm-workspace' | 'ncontiero/toml/setup' | 'ncontiero/toml/rules' | 'ncontiero/markdown/setup' | 'ncontiero/markdown/processor' | 'ncontiero/markdown/parser' | 'ncontiero/markdown/rules' | 'ncontiero/regexp/rules' | 'ncontiero/react/setup' | 'ncontiero/tanstack-query' | 'ncontiero/react/rules' | 'ncontiero/nextjs/rules' | 'ncontiero/html/setup' | 'ncontiero/html/rules' | 'ncontiero/tailwindcss/setup' | 'ncontiero/tailwindcss/rules' | 'ncontiero/prettier/setup' | 'ncontiero/prettier/disables' | 'ncontiero/prettier/rules' | 'ncontiero/prettier/markdown' | 'ncontiero/prettier/css' | 'ncontiero/prettier/scss' | 'ncontiero/prettier/less';
16378
+ type ConfigNames = 'ncontiero/gitignore' | 'ncontiero/global-ignores' | 'ncontiero/javascript/rules' | 'ncontiero/javascript/cli-rules' | 'ncontiero/javascript/test-rules' | 'ncontiero/comments/rules' | 'ncontiero/jsdoc/setup' | 'ncontiero/jsdoc/rules' | 'ncontiero/imports/rules' | 'ncontiero/imports/allow-default-export' | 'ncontiero/node/setup' | 'ncontiero/node/rules' | 'ncontiero/promise/setup' | 'ncontiero/promise/rules' | 'ncontiero/command/rules' | 'ncontiero/perfectionist/rules' | 'ncontiero/de-morgan' | 'ncontiero/unicorn/rules' | 'ncontiero/typescript/setup' | 'ncontiero/typescript/parser' | 'ncontiero/typescript/rules' | 'ncontiero/typescript/dts-rules' | 'ncontiero/typescript/cjs-rules' | 'ncontiero/jsonc/recommended' | 'ncontiero/jsonc/recommended' | 'ncontiero/jsonc/recommended' | 'ncontiero/jsonc/rules' | 'ncontiero/sort/package-json' | 'ncontiero/sort/tsconfig' | 'ncontiero/yml/setup' | 'ncontiero/yml/rules' | 'ncontiero/yml/pnpm-workspace' | 'ncontiero/toml/setup' | 'ncontiero/toml/rules' | 'ncontiero/markdown/setup' | 'ncontiero/markdown/processor' | 'ncontiero/markdown/parser' | 'ncontiero/markdown/rules' | 'ncontiero/regexp/rules' | 'ncontiero/react/setup' | 'ncontiero/tanstack-query' | 'ncontiero/react/rules' | 'ncontiero/react/typescript' | 'ncontiero/nextjs/rules' | 'ncontiero/html/setup' | 'ncontiero/html/rules' | 'ncontiero/tailwindcss/setup' | 'ncontiero/tailwindcss/rules' | 'ncontiero/prettier/setup' | 'ncontiero/prettier/disables' | 'ncontiero/prettier/rules' | 'ncontiero/prettier/markdown' | 'ncontiero/prettier/css' | 'ncontiero/prettier/scss' | 'ncontiero/prettier/less';
16379
16379
  //#endregion
16380
16380
  //#region src/types.d.ts
16381
16381
  type Awaitable<T> = T | Promise<T>;
@@ -16634,7 +16634,7 @@ declare function prettier(options?: PrettierOptions): Promise<FlatConfigItem[]>;
16634
16634
  declare function promise(): Promise<FlatConfigItem[]>;
16635
16635
  //#endregion
16636
16636
  //#region src/configs/react.d.ts
16637
- declare function react(options?: OptionsOverrides & OptionsFiles & OptionsHasTanStackReactQuery): Promise<FlatConfigItem[]>;
16637
+ declare function react(options?: OptionsTypeScriptParserOptions & OptionsTypeScriptWithTypes & OptionsOverrides & OptionsFiles & OptionsHasTanStackReactQuery): Promise<FlatConfigItem[]>;
16638
16638
  //#endregion
16639
16639
  //#region src/configs/regexp.d.ts
16640
16640
  declare function regexp(options?: OptionsOverrides): FlatConfigItem[];
@@ -16690,7 +16690,6 @@ declare const GLOB_JS = "**/*.?([cm])js";
16690
16690
  declare const GLOB_JSX = "**/*.?([cm])jsx";
16691
16691
  declare const GLOB_TS = "**/*.?([cm])ts";
16692
16692
  declare const GLOB_TSX = "**/*.?([cm])tsx";
16693
- declare const GLOB_REACT = "**/*.?([cm])?(j|t)sx";
16694
16693
  declare const GLOB_STYLE = "**/*.{c,le,sc}ss";
16695
16694
  declare const GLOB_CSS = "**/*.css";
16696
16695
  declare const GLOB_POSTCSS = "**/*.{p,post}css";
@@ -16790,4 +16789,4 @@ declare function composer({
16790
16789
  }: ComposerOptions): Promise<FlatConfigItem[]>;
16791
16790
  declare function toArray<T>(value: T | T[]): T[];
16792
16791
  //#endregion
16793
- export { Awaitable, ComposerOptions, type ConfigNames, FlatConfigItem, GLOB_ALL_SRC, GLOB_CSS, GLOB_DIST, GLOB_EXCLUDE, GLOB_HTML, GLOB_JS, GLOB_JSON, GLOB_JSON5, GLOB_JSONC, GLOB_JSX, GLOB_LESS, GLOB_LOCKFILE, GLOB_MARKDOWN, GLOB_MARKDOWN_CODE, GLOB_MARKDOWN_IN_MARKDOWN, GLOB_NODE_MODULES, GLOB_POSTCSS, GLOB_REACT, GLOB_SCSS, GLOB_SRC, GLOB_SRC_EXT, GLOB_STYLE, GLOB_TOML, GLOB_TS, GLOB_TSX, GLOB_YAML, HTMLOptions, OptionsConfig, OptionsFiles, OptionsHasNextJs, OptionsHasRegexp, OptionsHasTanStackReactQuery, OptionsHasTypeScript, OptionsOverrides, OptionsTailwindCSS, OptionsTypeScriptParserOptions, OptionsTypeScriptWithTypes, OptionsTypescript, OptionsUnicorn, type PrettierOptions, ResolvedOptions, Rules, StyleConfig, StyleOptions, combine, command, comments, composer, deMorgan, defaultPluginRenaming, ensurePackages, getOverrides, hasNextJs, hasReact, hasTailwind, hasTanStackReactQuery, hasTypeScript, html, ignores, imports, interopDefault, javascript, jsdoc, jsonc, markdown, ncontiero, nextJs, node, parserPlain, perfectionist, prettier, promise, react, regexp, renamePluginInConfigs, renameRules, resolveSubOptions, restrictedSyntaxJs, sortPackageJson, sortPnpmWorkspace, sortTsconfig, tailwindcss, toArray, toml, typescript, unicorn, yml };
16792
+ export { Awaitable, ComposerOptions, type ConfigNames, FlatConfigItem, GLOB_ALL_SRC, GLOB_CSS, GLOB_DIST, GLOB_EXCLUDE, GLOB_HTML, GLOB_JS, GLOB_JSON, GLOB_JSON5, GLOB_JSONC, GLOB_JSX, GLOB_LESS, GLOB_LOCKFILE, GLOB_MARKDOWN, GLOB_MARKDOWN_CODE, GLOB_MARKDOWN_IN_MARKDOWN, GLOB_NODE_MODULES, GLOB_POSTCSS, GLOB_SCSS, GLOB_SRC, GLOB_SRC_EXT, GLOB_STYLE, GLOB_TOML, GLOB_TS, GLOB_TSX, GLOB_YAML, HTMLOptions, OptionsConfig, OptionsFiles, OptionsHasNextJs, OptionsHasRegexp, OptionsHasTanStackReactQuery, OptionsHasTypeScript, OptionsOverrides, OptionsTailwindCSS, OptionsTypeScriptParserOptions, OptionsTypeScriptWithTypes, OptionsTypescript, OptionsUnicorn, type PrettierOptions, ResolvedOptions, Rules, StyleConfig, StyleOptions, combine, command, comments, composer, deMorgan, defaultPluginRenaming, ensurePackages, getOverrides, hasNextJs, hasReact, hasTailwind, hasTanStackReactQuery, hasTypeScript, html, ignores, imports, interopDefault, javascript, jsdoc, jsonc, markdown, ncontiero, nextJs, node, parserPlain, perfectionist, prettier, promise, react, regexp, renamePluginInConfigs, renameRules, resolveSubOptions, restrictedSyntaxJs, sortPackageJson, sortPnpmWorkspace, sortTsconfig, tailwindcss, toArray, toml, typescript, unicorn, yml };
package/dist/index.mjs CHANGED
@@ -50,7 +50,6 @@ const GLOB_JS = "**/*.?([cm])js";
50
50
  const GLOB_JSX = "**/*.?([cm])jsx";
51
51
  const GLOB_TS = "**/*.?([cm])ts";
52
52
  const GLOB_TSX = "**/*.?([cm])tsx";
53
- const GLOB_REACT = "**/*.?([cm])?(j|t)sx";
54
53
  const GLOB_STYLE = "**/*.{c,le,sc}ss";
55
54
  const GLOB_CSS = "**/*.css";
56
55
  const GLOB_POSTCSS = "**/*.{p,post}css";
@@ -612,7 +611,7 @@ async function markdown(options = {}) {
612
611
  //#endregion
613
612
  //#region src/configs/nextjs.ts
614
613
  async function nextJs(options = {}) {
615
- const { files = [GLOB_REACT], overrides = {} } = options;
614
+ const { files = [GLOB_SRC], overrides = {} } = options;
616
615
  return [{
617
616
  files,
618
617
  name: "ncontiero/nextjs/rules",
@@ -809,8 +808,13 @@ const ReactRouterPackages = [
809
808
  ];
810
809
  const NextJsPackages = ["next"];
811
810
  async function react(options = {}) {
812
- const { files = [GLOB_REACT], overrides = {}, reactQuery } = options;
811
+ const { files = [GLOB_SRC], filesTypeAware = [GLOB_TS, GLOB_TSX], ignoresTypeAware = [`${GLOB_MARKDOWN}/**`], overrides = {}, reactQuery, tsconfigPath } = options;
813
812
  if (reactQuery) ensurePackages(["@tanstack/eslint-plugin-query"]);
813
+ const isTypeAware = !!tsconfigPath;
814
+ const typeAwareRules = {
815
+ "react/no-leaked-conditional-rendering": "error",
816
+ "react/no-unused-props": "warn"
817
+ };
814
818
  const [pluginA11y, pluginReact, pluginReactRefresh] = await Promise.all([
815
819
  interopDefault(import("eslint-plugin-jsx-a11y")),
816
820
  interopDefault(import("@eslint-react/eslint-plugin")),
@@ -999,21 +1003,32 @@ async function react(options = {}) {
999
1003
  }],
1000
1004
  "react/dom-no-missing-button-type": "warn",
1001
1005
  "react/dom-no-missing-iframe-sandbox": "warn",
1002
- "react/dom-no-unknown-property": "warn",
1003
1006
  "react/dom-no-unsafe-target-blank": "warn",
1004
1007
  "react/globals": "warn",
1005
1008
  "react/immutability": "warn",
1006
1009
  "react/jsx-no-useless-fragment": "warn",
1007
1010
  "react/no-duplicate-key": "warn",
1008
- "react/no-leaked-conditional-rendering": "error",
1009
1011
  "react/no-missing-component-display-name": "warn",
1010
1012
  "react/no-unstable-context-value": "warn",
1011
1013
  "react/no-unstable-default-props": "warn",
1012
- "react/no-unused-props": "warn",
1013
1014
  "react/refs": "warn",
1014
1015
  ...overrides
1015
1016
  }
1016
- }
1017
+ },
1018
+ {
1019
+ files: filesTypeAware,
1020
+ name: "ncontiero/react/typescript",
1021
+ rules: {
1022
+ "react/dom-no-string-style-prop": "off",
1023
+ "react/dom-no-unknown-property": "off"
1024
+ }
1025
+ },
1026
+ ...isTypeAware ? [{
1027
+ files: filesTypeAware,
1028
+ ignores: ignoresTypeAware,
1029
+ name: "ncontiero/react/type-aware-rules",
1030
+ rules: { ...typeAwareRules }
1031
+ }] : []
1017
1032
  ];
1018
1033
  }
1019
1034
  //#endregion
@@ -1290,7 +1305,7 @@ async function tailwindcss(options = {}) {
1290
1305
  tailwindConfig: configPath
1291
1306
  } }
1292
1307
  }, {
1293
- files: [GLOB_REACT, GLOB_HTML],
1308
+ files: [GLOB_SRC, GLOB_HTML],
1294
1309
  name: "ncontiero/tailwindcss/rules",
1295
1310
  rules: {
1296
1311
  "tailwindcss/enforce-consistent-class-order": "warn",
@@ -1421,7 +1436,7 @@ async function typescript(options = {}) {
1421
1436
  name: "ncontiero/typescript/rules",
1422
1437
  rules: {
1423
1438
  ...renameRules(pluginTs.configs["eslint-recommended"].overrides[0].rules, { "@typescript-eslint": "ts" }),
1424
- ...renameRules(pluginTs.configs.recommended.rules, { "@typescript-eslint": "ts" }),
1439
+ ...renameRules(pluginTs.configs.strict.rules, { "@typescript-eslint": "ts" }),
1425
1440
  "no-dupe-class-members": "off",
1426
1441
  "no-redeclare": "off",
1427
1442
  "no-restricted-syntax": [
@@ -1739,8 +1754,10 @@ function ncontiero(options = {}, ...userConfigs) {
1739
1754
  if (options.markdown ?? true) configs.push(markdown({ overrides: getOverrides(options, "markdown") }));
1740
1755
  if (enableRegexp) configs.push(regexp(typeof enableRegexp === "boolean" ? {} : enableRegexp));
1741
1756
  if (enableReact) configs.push(react({
1757
+ ...typescriptOptions,
1742
1758
  overrides: getOverrides(options, "react"),
1743
- reactQuery: !!enableTanStackReactQuery
1759
+ reactQuery: !!enableTanStackReactQuery,
1760
+ tsconfigPath
1744
1761
  }));
1745
1762
  if (enableNextJs) configs.push(nextJs({ overrides: getOverrides(options, "nextjs") }));
1746
1763
  if (options.html ?? true) configs.push(html({
@@ -1764,4 +1781,4 @@ function ncontiero(options = {}, ...userConfigs) {
1764
1781
  });
1765
1782
  }
1766
1783
  //#endregion
1767
- export { GLOB_ALL_SRC, GLOB_CSS, GLOB_DIST, GLOB_EXCLUDE, GLOB_HTML, GLOB_JS, GLOB_JSON, GLOB_JSON5, GLOB_JSONC, GLOB_JSX, GLOB_LESS, GLOB_LOCKFILE, GLOB_MARKDOWN, GLOB_MARKDOWN_CODE, GLOB_MARKDOWN_IN_MARKDOWN, GLOB_NODE_MODULES, GLOB_POSTCSS, GLOB_REACT, GLOB_SCSS, GLOB_SRC, GLOB_SRC_EXT, GLOB_STYLE, GLOB_TOML, GLOB_TS, GLOB_TSX, GLOB_YAML, combine, command, comments, composer, deMorgan, defaultPluginRenaming, ensurePackages, getOverrides, hasNextJs, hasReact, hasTailwind, hasTanStackReactQuery, hasTypeScript, html, ignores, imports, interopDefault, javascript, jsdoc, jsonc, markdown, ncontiero, nextJs, node, parserPlain, perfectionist, prettier, promise, react, regexp, renamePluginInConfigs, renameRules, resolveSubOptions, restrictedSyntaxJs, sortPackageJson, sortPnpmWorkspace, sortTsconfig, tailwindcss, toArray, toml, typescript, unicorn, yml };
1784
+ export { GLOB_ALL_SRC, GLOB_CSS, GLOB_DIST, GLOB_EXCLUDE, GLOB_HTML, GLOB_JS, GLOB_JSON, GLOB_JSON5, GLOB_JSONC, GLOB_JSX, GLOB_LESS, GLOB_LOCKFILE, GLOB_MARKDOWN, GLOB_MARKDOWN_CODE, GLOB_MARKDOWN_IN_MARKDOWN, GLOB_NODE_MODULES, GLOB_POSTCSS, GLOB_SCSS, GLOB_SRC, GLOB_SRC_EXT, GLOB_STYLE, GLOB_TOML, GLOB_TS, GLOB_TSX, GLOB_YAML, combine, command, comments, composer, deMorgan, defaultPluginRenaming, ensurePackages, getOverrides, hasNextJs, hasReact, hasTailwind, hasTanStackReactQuery, hasTypeScript, html, ignores, imports, interopDefault, javascript, jsdoc, jsonc, markdown, ncontiero, nextJs, node, parserPlain, perfectionist, prettier, promise, react, regexp, renamePluginInConfigs, renameRules, resolveSubOptions, restrictedSyntaxJs, sortPackageJson, sortPnpmWorkspace, sortTsconfig, tailwindcss, toArray, toml, typescript, unicorn, yml };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ncontiero/eslint-config",
3
3
  "type": "module",
4
- "version": "8.0.0-beta.1",
4
+ "version": "8.0.0-beta.2",
5
5
  "packageManager": "pnpm@10.33.2",
6
6
  "description": "Nicolas's ESLint config.",
7
7
  "author": {