@debbl/eslint-config 3.15.1 → 3.16.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
@@ -28,13 +28,7 @@ type JsoncConfig = ConfigFn;
28
28
  declare const jsonc: JsoncConfig;
29
29
  //#endregion
30
30
  //#region src/configs/markdown.d.ts
31
- type MarkdownConfig = (options: {
32
- componentExts?: string[];
33
- /**
34
- * @deprecated remove this option
35
- */
36
- mdx?: boolean;
37
- } & OptionsOverrides) => ReturnType<ConfigFn>;
31
+ type MarkdownConfig = (options: OptionsFiles & OptionsComponentExts & OptionsMarkdown) => Promise<ConfigItem[]>;
38
32
  declare const markdown: MarkdownConfig;
39
33
  //#endregion
40
34
  //#region src/configs/node.d.ts
@@ -100,7 +94,7 @@ declare const yml: YmlConfig;
100
94
  type ReactConfig = (options: {
101
95
  next?: boolean;
102
96
  compiler?: boolean;
103
- } & OptionsOverrides) => ReturnType<ConfigFn>;
97
+ } & OptionsOverrides & OptionsTypeScriptWithTypes) => ReturnType<ConfigFn>;
104
98
  //#endregion
105
99
  //#region src/configs/tailwindcss.d.ts
106
100
  type TailwindcssConfig = (options: {
@@ -128,6 +122,27 @@ interface ConfigItem extends Linter.Config {
128
122
  interface OptionsOverrides {
129
123
  overrides?: ConfigItem['rules'];
130
124
  }
125
+ interface OptionsFiles {
126
+ files?: string[];
127
+ }
128
+ interface OptionsMarkdown extends OptionsOverrides {
129
+ /**
130
+ * Enable GFM (GitHub Flavored Markdown) support.
131
+ * @default true
132
+ */
133
+ gfm?: boolean;
134
+ /**
135
+ * Override rules for markdown itself.
136
+ */
137
+ overridesMarkdown?: ConfigItem['rules'];
138
+ }
139
+ interface OptionsTypeScriptWithTypes {
140
+ /**
141
+ * When this options is provided, type aware rules will be enabled.
142
+ * @see https://typescript-eslint.io/linting/typed-linting/
143
+ */
144
+ tsconfigPath?: string;
145
+ }
131
146
  type ConfigFn = (options: OptionsOverrides) => Awaitable<ConfigItem[]>;
132
147
  interface OptionsComponentExts {
133
148
  /**
@@ -198,7 +213,7 @@ interface OptionsConfig extends OptionsComponentExts {
198
213
  *
199
214
  * @default false
200
215
  */
201
- react?: boolean | GetConfigOption<ReactConfig>;
216
+ react?: boolean | Omit<GetConfigOption<ReactConfig>, 'tsconfigPath'>;
202
217
  /**
203
218
  * Enable solid support, Passing an object to enable Next.js support.
204
219
  *
@@ -269,6 +284,7 @@ declare const GLOB_JSONC = "**/*.jsonc";
269
284
  declare const GLOB_MARKDOWN = "**/*.md";
270
285
  declare const GLOB_MDX = "**/*.mdx";
271
286
  declare const GLOB_MARKDOWN_CODE = "**/*.md/**/*.?([cm])[jt]s?(x)";
287
+ declare const GLOB_MARKDOWN_IN_MARKDOWN = "**/*.md/*.md";
272
288
  declare const GLOB_ASTRO_TS = "**/*.astro/*.ts";
273
289
  declare const GLOB_VUE = "**/*.vue";
274
290
  declare const GLOB_YAML = "**/*.y?(a)ml";
@@ -313,5 +329,5 @@ declare function interopDefault<T>(m: Awaitable<T>): Promise<T extends {
313
329
  } ? U : T>;
314
330
  declare function getConfigOptions<T>(options: T): {};
315
331
  //#endregion
316
- export { Awaitable, ConfigFn, ConfigItem, GLOB_ALL_SRC, GLOB_ASTRO_TS, GLOB_CSS, GLOB_EXCLUDE, GLOB_HTML, GLOB_JS, GLOB_JSON, GLOB_JSON5, GLOB_JSONC, GLOB_JSX, GLOB_LESS, GLOB_MARKDOWN, GLOB_MARKDOWN_CODE, GLOB_MDX, GLOB_POSTCSS, GLOB_SCSS, GLOB_SRC, GLOB_SRC_EXT, GLOB_STYLE, GLOB_TESTS, GLOB_TOML, GLOB_TS, GLOB_TSX, GLOB_VUE, GLOB_YAML, GetConfigOption, IgnoresConfig, JavascriptConfig, JsoncConfig, MarkdownConfig, OptionsComponentExts, OptionsConfig, OptionsHasTypeScript, OptionsOverrides, OptionsTypeScriptParserOptions, OptionsTypeScriptWithTypes, PrettierConfig, PrettierRequiredOptions, TestConfig, TomlConfig, TypeScriptConfig, VueConfig, YmlConfig, combine, comments, defineConfig as default, defineConfig, getConfigOptions, ignores, imports, interopDefault, javascript, jsdoc, jsonc, markdown, node, parserPlain, perfectionist, prettier, sortPackageJson, sortTsconfig, test, toml, typescript, unicorn, vue, yml };
332
+ export { Awaitable, ConfigFn, ConfigItem, GLOB_ALL_SRC, GLOB_ASTRO_TS, GLOB_CSS, GLOB_EXCLUDE, GLOB_HTML, GLOB_JS, GLOB_JSON, GLOB_JSON5, GLOB_JSONC, GLOB_JSX, GLOB_LESS, GLOB_MARKDOWN, GLOB_MARKDOWN_CODE, GLOB_MARKDOWN_IN_MARKDOWN, GLOB_MDX, GLOB_POSTCSS, GLOB_SCSS, GLOB_SRC, GLOB_SRC_EXT, GLOB_STYLE, GLOB_TESTS, GLOB_TOML, GLOB_TS, GLOB_TSX, GLOB_VUE, GLOB_YAML, GetConfigOption, IgnoresConfig, JavascriptConfig, JsoncConfig, MarkdownConfig, OptionsComponentExts, OptionsConfig, OptionsFiles, OptionsHasTypeScript, OptionsMarkdown, OptionsOverrides, OptionsTypeScriptParserOptions, OptionsTypeScriptWithTypes, PrettierConfig, PrettierRequiredOptions, TestConfig, TomlConfig, TypeScriptConfig, VueConfig, YmlConfig, combine, comments, defineConfig as default, defineConfig, getConfigOptions, ignores, imports, interopDefault, javascript, jsdoc, jsonc, markdown, node, parserPlain, perfectionist, prettier, sortPackageJson, sortTsconfig, test, toml, typescript, unicorn, vue, yml };
317
333
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/configs/comments.ts","../src/configs/ignores.ts","../src/configs/imports.ts","../src/configs/javascript.ts","../src/configs/jsdoc.ts","../src/configs/jsonc.ts","../src/configs/markdown.ts","../src/configs/node.ts","../src/configs/perfectionist.ts","../src/configs/prettier.ts","../src/configs/sort.ts","../src/configs/test.ts","../src/configs/toml.ts","../src/configs/typescript.ts","../src/configs/unicorn.ts","../src/configs/vue.ts","../src/configs/yml.ts","../src/configs/react.ts","../src/configs/tailwindcss.ts","../src/types.ts","../src/factory.ts","../src/globs.ts","../src/utils.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/configs/comments.ts","../src/configs/ignores.ts","../src/configs/imports.ts","../src/configs/javascript.ts","../src/configs/jsdoc.ts","../src/configs/jsonc.ts","../src/configs/markdown.ts","../src/configs/node.ts","../src/configs/perfectionist.ts","../src/configs/prettier.ts","../src/configs/sort.ts","../src/configs/test.ts","../src/configs/toml.ts","../src/configs/typescript.ts","../src/configs/unicorn.ts","../src/configs/vue.ts","../src/configs/yml.ts","../src/configs/react.ts","../src/configs/tailwindcss.ts","../src/types.ts","../src/factory.ts","../src/globs.ts","../src/utils.ts"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -1,4 +1,5 @@
1
1
  import globals from "globals";
2
+ import { mergeProcessors, processorPassThrough } from "eslint-merge-processors";
2
3
  import process from "node:process";
3
4
 
4
5
  //#region src/utils.ts
@@ -70,6 +71,7 @@ const GLOB_JSONC = "**/*.jsonc";
70
71
  const GLOB_MARKDOWN = "**/*.md";
71
72
  const GLOB_MDX = "**/*.mdx";
72
73
  const GLOB_MARKDOWN_CODE = `${GLOB_MARKDOWN}/${GLOB_SRC}`;
74
+ const GLOB_MARKDOWN_IN_MARKDOWN = "**/*.md/*.md";
73
75
  const GLOB_ASTRO_TS = "**/*.astro/*.ts";
74
76
  const GLOB_VUE = "**/*.vue";
75
77
  const GLOB_YAML = "**/*.y?(a)ml";
@@ -413,10 +415,9 @@ async function jsdoc() {
413
415
  //#region src/configs/jsonc.ts
414
416
  const jsonc = async (options) => {
415
417
  const { overrides = {} } = options;
416
- const [pluginJsonc, parserJsonc] = await Promise.all([interopDefault(import("eslint-plugin-jsonc")), interopDefault(import("jsonc-eslint-parser"))]);
417
418
  return [{
418
419
  name: "eslint/jsonc/setup",
419
- plugins: { jsonc: pluginJsonc }
420
+ plugins: { jsonc: await interopDefault(import("eslint-plugin-jsonc")) }
420
421
  }, {
421
422
  name: "eslint/jsonc/rules",
422
423
  files: [
@@ -424,7 +425,7 @@ const jsonc = async (options) => {
424
425
  GLOB_JSON5,
425
426
  GLOB_JSONC
426
427
  ],
427
- languageOptions: { parser: parserJsonc },
428
+ language: "jsonc/x",
428
429
  rules: {
429
430
  "jsonc/no-bigint-literals": "error",
430
431
  "jsonc/no-binary-expression": "error",
@@ -473,31 +474,73 @@ const jsonc = async (options) => {
473
474
 
474
475
  //#endregion
475
476
  //#region src/configs/markdown.ts
476
- const markdown = async (options) => {
477
- const { mdx: _enableMdx = false, componentExts = [], overrides = {} } = options;
477
+ const markdown = async (options = {}) => {
478
+ const { componentExts = [], files = [GLOB_MARKDOWN], gfm = true, overrides = {}, overridesMarkdown = {} } = options;
479
+ const pluginMarkdown = await interopDefault(import("@eslint/markdown"));
478
480
  return [
479
481
  {
480
482
  name: "eslint/markdown/setup",
481
- plugins: { markdown: await interopDefault(import("@eslint/markdown")) }
483
+ plugins: { markdown: pluginMarkdown }
482
484
  },
483
485
  {
486
+ files,
487
+ ignores: [GLOB_MARKDOWN_IN_MARKDOWN],
484
488
  name: "eslint/markdown/processor",
485
- files: [GLOB_MARKDOWN],
486
- languageOptions: {
487
- ecmaVersion: "latest",
488
- parser: parserPlain,
489
- sourceType: "module"
489
+ processor: mergeProcessors([pluginMarkdown.processors.markdown, processorPassThrough])
490
+ },
491
+ {
492
+ files,
493
+ language: gfm ? "markdown/gfm" : "markdown/commonmark",
494
+ name: "eslint/markdown/parser"
495
+ },
496
+ {
497
+ files,
498
+ name: "eslint/markdown/rules",
499
+ rules: {
500
+ ...pluginMarkdown.configs.recommended.at(0)?.rules,
501
+ "markdown/no-missing-label-refs": "off",
502
+ ...overridesMarkdown
503
+ }
504
+ },
505
+ {
506
+ files,
507
+ name: "eslint/markdown/disables/markdown",
508
+ rules: {
509
+ "jsdoc/check-access": "off",
510
+ "jsdoc/check-alignment": "off",
511
+ "jsdoc/check-param-names": "off",
512
+ "jsdoc/check-property-names": "off",
513
+ "jsdoc/check-types": "off",
514
+ "jsdoc/empty-tags": "off",
515
+ "jsdoc/implements-on-classes": "off",
516
+ "jsdoc/multiline-blocks": "off",
517
+ "jsdoc/no-defaults": "off",
518
+ "jsdoc/no-multi-asterisks": "off",
519
+ "jsdoc/require-param-name": "off",
520
+ "jsdoc/require-property": "off",
521
+ "jsdoc/require-property-description": "off",
522
+ "jsdoc/require-property-name": "off",
523
+ "jsdoc/require-returns-check": "off",
524
+ "jsdoc/require-returns-description": "off",
525
+ "jsdoc/require-yields-check": "off",
526
+ "no-irregular-whitespace": "off",
527
+ "perfectionist/sort-exports": "off",
528
+ "perfectionist/sort-imports": "off"
490
529
  }
491
530
  },
492
531
  {
493
- name: "eslint/markdown/disables",
494
532
  files: [GLOB_MARKDOWN_CODE, ...componentExts.map((ext) => `${GLOB_MARKDOWN}/**/*.${ext}`)],
495
533
  languageOptions: { parserOptions: { ecmaFeatures: { impliedStrict: true } } },
534
+ name: "eslint/markdown/disables/code",
496
535
  rules: {
497
536
  "no-alert": "off",
498
537
  "no-console": "off",
538
+ "no-labels": "off",
539
+ "no-lone-blocks": "off",
540
+ "no-restricted-syntax": "off",
499
541
  "no-undef": "off",
500
542
  "no-unused-expressions": "off",
543
+ "no-unused-labels": "off",
501
544
  "no-unused-vars": "off",
502
545
  "node/prefer-global/process": "off",
503
546
  "@typescript-eslint/consistent-type-imports": "off",
@@ -1346,123 +1389,135 @@ async function next() {
1346
1389
  }];
1347
1390
  }
1348
1391
  const react = async (options) => {
1349
- const { next: enableNext = false, compiler: enableCompiler = false, overrides = {} } = options;
1392
+ const { next: enableNext = false, compiler: enableCompiler = false, overrides = {}, tsconfigPath } = options;
1393
+ const isTypeAware = !!tsconfigPath;
1350
1394
  const [pluginsReact, pluginReactHooks, pluginReactRefresh] = await Promise.all([
1351
1395
  interopDefault(import("@eslint-react/eslint-plugin")),
1352
1396
  interopDefault(import("eslint-plugin-react-hooks")),
1353
1397
  interopDefault(import("eslint-plugin-react-refresh"))
1354
1398
  ]);
1355
1399
  const { "@eslint-react": pluginReactX, "@eslint-react/dom": pluginReactDom, "@eslint-react/hooks-extra": pluginReactHooksExtra, "@eslint-react/naming-convention": pluginReactNamingConvention, "@eslint-react/web-api": pluginReactWebApi } = pluginsReact.configs.all.plugins;
1356
- return combine([{
1357
- name: "eslint/react/setup",
1358
- plugins: {
1359
- "react": pluginReactX,
1360
- "react-dom": pluginReactDom,
1361
- "react-hooks-extra": pluginReactHooksExtra,
1362
- "react-naming-convention": pluginReactNamingConvention,
1363
- "react-web-api": pluginReactWebApi,
1364
- "react-hooks": pluginReactHooks,
1365
- "react-refresh": pluginReactRefresh,
1366
- ...enableCompiler ? { "react-compiler": await interopDefault(import("eslint-plugin-react-compiler")) } : {}
1367
- }
1368
- }, {
1369
- name: "eslint/react/rules",
1370
- files: [GLOB_TSX, GLOB_JSX],
1371
- languageOptions: {
1372
- sourceType: "module",
1373
- parserOptions: { ecmaFeatures: { jsx: true } }
1400
+ const typeAwareRules = {
1401
+ "react/no-leaked-conditional-rendering": "warn",
1402
+ "react/no-implicit-key": "error"
1403
+ };
1404
+ return combine([
1405
+ {
1406
+ name: "eslint/react/setup",
1407
+ plugins: {
1408
+ "react": pluginReactX,
1409
+ "react-dom": pluginReactDom,
1410
+ "react-hooks-extra": pluginReactHooksExtra,
1411
+ "react-naming-convention": pluginReactNamingConvention,
1412
+ "react-web-api": pluginReactWebApi,
1413
+ "react-hooks": pluginReactHooks,
1414
+ "react-refresh": pluginReactRefresh,
1415
+ ...enableCompiler ? { "react-compiler": await interopDefault(import("eslint-plugin-react-compiler")) } : {}
1416
+ }
1374
1417
  },
1375
- settings: { react: { version: "detect" } },
1376
- rules: {
1377
- "react/jsx-key-before-spread": "warn",
1378
- "react/jsx-no-comment-textnodes": "warn",
1379
- "react/jsx-no-duplicate-props": "warn",
1380
- "react/jsx-uses-react": "warn",
1381
- "react/jsx-uses-vars": "warn",
1382
- "react/no-access-state-in-setstate": "error",
1383
- "react/no-array-index-key": "warn",
1384
- "react/no-children-count": "warn",
1385
- "react/no-children-for-each": "warn",
1386
- "react/no-children-map": "warn",
1387
- "react/no-children-only": "warn",
1388
- "react/no-children-to-array": "warn",
1389
- "react/no-clone-element": "warn",
1390
- "react/no-component-will-mount": "error",
1391
- "react/no-component-will-receive-props": "error",
1392
- "react/no-component-will-update": "error",
1393
- "react/no-context-provider": "warn",
1394
- "react/no-create-ref": "error",
1395
- "react/no-default-props": "error",
1396
- "react/no-direct-mutation-state": "error",
1397
- "react/no-duplicate-key": "error",
1398
- "react/no-forward-ref": "warn",
1399
- "react/no-implicit-key": "warn",
1400
- "react/no-missing-key": "error",
1401
- "react/no-nested-component-definitions": "error",
1402
- "react/no-nested-lazy-component-declarations": "error",
1403
- "react/no-prop-types": "error",
1404
- "react/no-redundant-should-component-update": "error",
1405
- "react/no-set-state-in-component-did-mount": "warn",
1406
- "react/no-set-state-in-component-did-update": "warn",
1407
- "react/no-set-state-in-component-will-update": "warn",
1408
- "react/no-string-refs": "error",
1409
- "react/no-unnecessary-use-prefix": "warn",
1410
- "react/no-unsafe-component-will-mount": "warn",
1411
- "react/no-unsafe-component-will-receive-props": "warn",
1412
- "react/no-unsafe-component-will-update": "warn",
1413
- "react/no-use-context": "warn",
1414
- "react/no-useless-forward-ref": "warn",
1415
- "react/prefer-use-state-lazy-initialization": "warn",
1416
- "react/prefer-namespace-import": "error",
1417
- "react-dom/no-dangerously-set-innerhtml": "warn",
1418
- "react-dom/no-dangerously-set-innerhtml-with-children": "error",
1419
- "react-dom/no-find-dom-node": "error",
1420
- "react-dom/no-flush-sync": "error",
1421
- "react-dom/no-hydrate": "error",
1422
- "react-dom/no-namespace": "error",
1423
- "react-dom/no-render": "error",
1424
- "react-dom/no-render-return-value": "error",
1425
- "react-dom/no-script-url": "warn",
1426
- "react-dom/no-unsafe-iframe-sandbox": "warn",
1427
- "react-dom/no-use-form-state": "error",
1428
- "react-dom/no-void-elements-with-children": "error",
1429
- "react-hooks/rules-of-hooks": "error",
1430
- "react-hooks/exhaustive-deps": "warn",
1431
- "react-hooks-extra/no-direct-set-state-in-use-effect": "warn",
1432
- "react-web-api/no-leaked-event-listener": "warn",
1433
- "react-web-api/no-leaked-interval": "warn",
1434
- "react-web-api/no-leaked-resize-observer": "warn",
1435
- "react-web-api/no-leaked-timeout": "warn",
1436
- "react-refresh/only-export-components": "warn",
1437
- ...enableCompiler ? {
1438
- "react-compiler/react-compiler": "error",
1439
- "react-hooks/config": "error",
1440
- "react-hooks/error-boundaries": "error",
1441
- "react-hooks/component-hook-factories": "error",
1442
- "react-hooks/gating": "error",
1443
- "react-hooks/globals": "error",
1444
- "react-hooks/immutability": "error",
1445
- "react-hooks/preserve-manual-memoization": "error",
1446
- "react-hooks/purity": "error",
1447
- "react-hooks/refs": "error",
1448
- "react-hooks/set-state-in-effect": "error",
1449
- "react-hooks/set-state-in-render": "error",
1450
- "react-hooks/static-components": "error",
1451
- "react-hooks/unsupported-syntax": "warn",
1452
- "react-hooks/use-memo": "error",
1453
- "react-hooks/incompatible-library": "warn"
1454
- } : {},
1455
- "jsx-quotes": ["error", "prefer-double"],
1456
- "react/react-in-jsx-scope": "off",
1457
- "react/jsx-indent": [1, 2],
1458
- "react/jsx-indent-props": [1, 2],
1459
- "react/jsx-closing-bracket-location": [1, {
1460
- selfClosing: "tag-aligned",
1461
- nonEmpty: "tag-aligned"
1462
- }],
1463
- ...overrides
1464
- }
1465
- }], enableNext ? next() : []);
1418
+ {
1419
+ name: "eslint/react/rules",
1420
+ files: [GLOB_TSX, GLOB_JSX],
1421
+ languageOptions: {
1422
+ sourceType: "module",
1423
+ parserOptions: { ecmaFeatures: { jsx: true } }
1424
+ },
1425
+ settings: { react: { version: "detect" } },
1426
+ rules: {
1427
+ "react/jsx-key-before-spread": "warn",
1428
+ "react/jsx-no-comment-textnodes": "warn",
1429
+ "react/jsx-no-duplicate-props": "warn",
1430
+ "react/jsx-uses-react": "warn",
1431
+ "react/jsx-uses-vars": "warn",
1432
+ "react/no-access-state-in-setstate": "error",
1433
+ "react/no-array-index-key": "warn",
1434
+ "react/no-children-count": "warn",
1435
+ "react/no-children-for-each": "warn",
1436
+ "react/no-children-map": "warn",
1437
+ "react/no-children-only": "warn",
1438
+ "react/no-children-to-array": "warn",
1439
+ "react/no-clone-element": "warn",
1440
+ "react/no-component-will-mount": "error",
1441
+ "react/no-component-will-receive-props": "error",
1442
+ "react/no-component-will-update": "error",
1443
+ "react/no-context-provider": "warn",
1444
+ "react/no-create-ref": "error",
1445
+ "react/no-default-props": "error",
1446
+ "react/no-direct-mutation-state": "error",
1447
+ "react/no-duplicate-key": "error",
1448
+ "react/no-forward-ref": "warn",
1449
+ "react/no-missing-key": "error",
1450
+ "react/no-nested-component-definitions": "error",
1451
+ "react/no-nested-lazy-component-declarations": "error",
1452
+ "react/no-prop-types": "error",
1453
+ "react/no-redundant-should-component-update": "error",
1454
+ "react/no-set-state-in-component-did-mount": "warn",
1455
+ "react/no-set-state-in-component-did-update": "warn",
1456
+ "react/no-set-state-in-component-will-update": "warn",
1457
+ "react/no-string-refs": "error",
1458
+ "react/no-unnecessary-use-prefix": "warn",
1459
+ "react/no-unsafe-component-will-mount": "warn",
1460
+ "react/no-unsafe-component-will-receive-props": "warn",
1461
+ "react/no-unsafe-component-will-update": "warn",
1462
+ "react/no-use-context": "warn",
1463
+ "react/no-useless-forward-ref": "warn",
1464
+ "react/prefer-use-state-lazy-initialization": "warn",
1465
+ "react/prefer-namespace-import": "error",
1466
+ "react-dom/no-dangerously-set-innerhtml": "warn",
1467
+ "react-dom/no-dangerously-set-innerhtml-with-children": "error",
1468
+ "react-dom/no-find-dom-node": "error",
1469
+ "react-dom/no-flush-sync": "error",
1470
+ "react-dom/no-hydrate": "error",
1471
+ "react-dom/no-namespace": "error",
1472
+ "react-dom/no-render": "error",
1473
+ "react-dom/no-render-return-value": "error",
1474
+ "react-dom/no-script-url": "warn",
1475
+ "react-dom/no-unsafe-iframe-sandbox": "warn",
1476
+ "react-dom/no-use-form-state": "error",
1477
+ "react-dom/no-void-elements-with-children": "error",
1478
+ "react-hooks/rules-of-hooks": "error",
1479
+ "react-hooks/exhaustive-deps": "warn",
1480
+ "react-hooks-extra/no-direct-set-state-in-use-effect": "warn",
1481
+ "react-web-api/no-leaked-event-listener": "warn",
1482
+ "react-web-api/no-leaked-interval": "warn",
1483
+ "react-web-api/no-leaked-resize-observer": "warn",
1484
+ "react-web-api/no-leaked-timeout": "warn",
1485
+ "react-refresh/only-export-components": "warn",
1486
+ ...enableCompiler ? {
1487
+ "react-compiler/react-compiler": "error",
1488
+ "react-hooks/config": "error",
1489
+ "react-hooks/error-boundaries": "error",
1490
+ "react-hooks/component-hook-factories": "error",
1491
+ "react-hooks/gating": "error",
1492
+ "react-hooks/globals": "error",
1493
+ "react-hooks/immutability": "error",
1494
+ "react-hooks/preserve-manual-memoization": "error",
1495
+ "react-hooks/purity": "error",
1496
+ "react-hooks/refs": "error",
1497
+ "react-hooks/set-state-in-effect": "error",
1498
+ "react-hooks/set-state-in-render": "error",
1499
+ "react-hooks/static-components": "error",
1500
+ "react-hooks/unsupported-syntax": "warn",
1501
+ "react-hooks/use-memo": "error",
1502
+ "react-hooks/incompatible-library": "warn"
1503
+ } : {},
1504
+ "jsx-quotes": ["error", "prefer-double"],
1505
+ "react/react-in-jsx-scope": "off",
1506
+ "react/jsx-indent": [1, 2],
1507
+ "react/jsx-indent-props": [1, 2],
1508
+ "react/jsx-closing-bracket-location": [1, {
1509
+ selfClosing: "tag-aligned",
1510
+ nonEmpty: "tag-aligned"
1511
+ }],
1512
+ ...overrides
1513
+ }
1514
+ },
1515
+ ...isTypeAware ? [{
1516
+ name: "eslint/react/type-aware-rules",
1517
+ files: [GLOB_TS, GLOB_TSX],
1518
+ rules: { ...typeAwareRules }
1519
+ }] : []
1520
+ ], enableNext ? next() : []);
1466
1521
  };
1467
1522
 
1468
1523
  //#endregion
@@ -1496,6 +1551,7 @@ const tailwindcss = async (options) => {
1496
1551
  function defineConfig(options = {}, ...userConfigs) {
1497
1552
  const { ignores: enableIgnores = true, vue: enableVue, react: enableReact, solid: enableSolid, typescript: enableTypeScript, tailwindcss: enableTailwindcss, componentExts = [] } = options;
1498
1553
  const configs = [];
1554
+ const tsconfigPath = typeof enableTypeScript !== "boolean" ? enableTypeScript?.tsconfigPath : void 0;
1499
1555
  configs.push(ignores(getConfigOptions(enableIgnores)), javascript(options.javascript ?? {}), comments(), node(), jsdoc(), imports(), unicorn(), perfectionist());
1500
1556
  if (enableVue) componentExts.push("vue");
1501
1557
  if (enableTypeScript) configs.push(typescript({
@@ -1508,7 +1564,10 @@ function defineConfig(options = {}, ...userConfigs) {
1508
1564
  ...getConfigOptions(options.vue),
1509
1565
  typescript: !!enableTypeScript
1510
1566
  }));
1511
- if (enableReact) configs.push(react(getConfigOptions(enableReact)));
1567
+ if (enableReact) configs.push(react({
1568
+ ...getConfigOptions(enableReact),
1569
+ tsconfigPath
1570
+ }));
1512
1571
  if (options.jsonc ?? true) configs.push(jsonc(getConfigOptions(options.jsonc)), sortPackageJson(), sortTsconfig());
1513
1572
  if (options.yml ?? true) configs.push(yml(getConfigOptions(options.yml)));
1514
1573
  if (options.toml ?? true) configs.push(toml(getConfigOptions(options.toml)));
@@ -1529,5 +1588,5 @@ function defineConfig(options = {}, ...userConfigs) {
1529
1588
  var src_default = defineConfig;
1530
1589
 
1531
1590
  //#endregion
1532
- export { GLOB_ALL_SRC, GLOB_ASTRO_TS, GLOB_CSS, GLOB_EXCLUDE, GLOB_HTML, GLOB_JS, GLOB_JSON, GLOB_JSON5, GLOB_JSONC, GLOB_JSX, GLOB_LESS, GLOB_MARKDOWN, GLOB_MARKDOWN_CODE, GLOB_MDX, GLOB_POSTCSS, GLOB_SCSS, GLOB_SRC, GLOB_SRC_EXT, GLOB_STYLE, GLOB_TESTS, GLOB_TOML, GLOB_TS, GLOB_TSX, GLOB_VUE, GLOB_YAML, combine, comments, src_default as default, defineConfig, getConfigOptions, ignores, imports, interopDefault, javascript, jsdoc, jsonc, markdown, node, parserPlain, perfectionist, prettier, sortPackageJson, sortTsconfig, test, toml, typescript, unicorn, vue, yml };
1591
+ export { GLOB_ALL_SRC, GLOB_ASTRO_TS, GLOB_CSS, GLOB_EXCLUDE, GLOB_HTML, GLOB_JS, GLOB_JSON, GLOB_JSON5, GLOB_JSONC, GLOB_JSX, GLOB_LESS, GLOB_MARKDOWN, GLOB_MARKDOWN_CODE, GLOB_MARKDOWN_IN_MARKDOWN, GLOB_MDX, GLOB_POSTCSS, GLOB_SCSS, GLOB_SRC, GLOB_SRC_EXT, GLOB_STYLE, GLOB_TESTS, GLOB_TOML, GLOB_TS, GLOB_TSX, GLOB_VUE, GLOB_YAML, combine, comments, src_default as default, defineConfig, getConfigOptions, ignores, imports, interopDefault, javascript, jsdoc, jsonc, markdown, node, parserPlain, perfectionist, prettier, sortPackageJson, sortTsconfig, test, toml, typescript, unicorn, vue, yml };
1533
1592
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../src/utils.ts","../src/configs/comments.ts","../src/globs.ts","../src/configs/ignores.ts","../src/configs/imports.ts","../src/configs/javascript.ts","../src/configs/jsdoc.ts","../src/configs/jsonc.ts","../src/configs/markdown.ts","../src/configs/node.ts","../src/configs/perfectionist.ts","../src/configs/prettier.ts","../src/configs/sort.ts","../src/configs/test.ts","../src/configs/toml.ts","../src/configs/typescript.ts","../src/configs/unicorn.ts","../src/configs/vue.ts","../src/configs/yml.ts","../src/configs/react.ts","../src/configs/tailwindcss.ts","../src/factory.ts","../src/index.ts"],"sourcesContent":["import type { Awaitable, ConfigItem } from './types'\n\nexport const parserPlain = {\n meta: {\n name: 'parser-plain',\n },\n parseForESLint: (code: string) => ({\n ast: {\n body: [],\n comments: [],\n loc: { end: code.length, start: 0 },\n range: [0, code.length],\n tokens: [],\n type: 'Program',\n },\n scopeManager: null,\n services: { isPlain: true },\n visitorKeys: {\n Program: [],\n },\n }),\n}\n\n/**\n * Combine array and non-array configs into a single array.\n */\nexport async function combine(\n ...configs: Awaitable<ConfigItem | ConfigItem[]>[]\n): Promise<ConfigItem[]> {\n const resolved = await Promise.all(configs)\n return resolved.flat()\n}\n\nexport async function interopDefault<T>(\n m: Awaitable<T>,\n): Promise<T extends { default: infer U } ? U : T> {\n const resolved = await m\n return (resolved as any).default || resolved\n}\n\nexport function getConfigOptions<T>(options: T) {\n return options ? (typeof options !== 'boolean' ? options : {}) : {}\n}\n","import { interopDefault } from '../utils'\nimport type { ConfigItem } from '../types'\n\nexport async function comments(): Promise<ConfigItem[]> {\n const pluginComments = await interopDefault(\n import('@eslint-community/eslint-plugin-eslint-comments'),\n )\n\n return [\n {\n name: 'eslint/eslint-comments/rules',\n plugins: {\n 'eslint-comments': pluginComments,\n },\n rules: {\n 'eslint-comments/no-aggregating-enable': 'error',\n 'eslint-comments/no-duplicate-disable': 'error',\n 'eslint-comments/no-unlimited-disable': 'error',\n 'eslint-comments/no-unused-enable': 'error',\n },\n },\n ]\n}\n","export const GLOB_SRC_EXT = '?([cm])[jt]s?(x)'\nexport const GLOB_SRC = '**/*.?([cm])[jt]s?(x)'\n\nexport const GLOB_JS = '**/*.?([cm])js'\nexport const GLOB_JSX = '**/*.?([cm])jsx'\n\nexport const GLOB_TS = '**/*.?([cm])ts'\nexport const GLOB_TSX = '**/*.?([cm])tsx'\n\nexport const GLOB_STYLE = '**/*.{c,le,sc}ss'\nexport const GLOB_CSS = '**/*.css'\nexport const GLOB_POSTCSS = '**/*.{p,post}css'\nexport const GLOB_LESS = '**/*.less'\nexport const GLOB_SCSS = '**/*.scss'\n\nexport const GLOB_JSON = '**/*.json'\nexport const GLOB_JSON5 = '**/*.json5'\nexport const GLOB_JSONC = '**/*.jsonc'\n\nexport const GLOB_MARKDOWN = '**/*.md'\nexport const GLOB_MDX = '**/*.mdx'\nexport const GLOB_MARKDOWN_CODE = `${GLOB_MARKDOWN}/${GLOB_SRC}`\nexport const GLOB_ASTRO_TS = '**/*.astro/*.ts'\n\nexport const GLOB_VUE = '**/*.vue'\n\nexport const GLOB_YAML = '**/*.y?(a)ml'\nexport const GLOB_TOML = '**/*.toml'\nexport const GLOB_HTML = '**/*.htm?(l)'\n\nexport const GLOB_TESTS = [\n `**/__tests__/**/*.${GLOB_SRC_EXT}`,\n `**/*.spec.${GLOB_SRC_EXT}`,\n `**/*.test.${GLOB_SRC_EXT}`,\n `**/*.bench.${GLOB_SRC_EXT}`,\n `**/*.benchmark.${GLOB_SRC_EXT}`,\n]\n\nexport const GLOB_ALL_SRC = [\n GLOB_SRC,\n GLOB_STYLE,\n GLOB_JSON,\n GLOB_JSON5,\n GLOB_MARKDOWN,\n GLOB_VUE,\n GLOB_YAML,\n GLOB_HTML,\n]\n\nexport const GLOB_EXCLUDE = [\n '**/node_modules',\n '**/dist',\n '**/package-lock.json',\n '**/yarn.lock',\n '**/pnpm-lock.yaml',\n '**/bun.lockb',\n\n '**/public',\n '**/output',\n '**/coverage',\n '**/temp',\n '**/.vitepress/cache',\n '**/.nuxt',\n '**/.next',\n '**/.vercel',\n '**/.changeset',\n '**/.idea',\n '**/.cache',\n '**/.output',\n '**/.vite-inspect',\n\n '**/CHANGELOG*.md',\n '**/*.min.*',\n '**/LICENSE*',\n '**/__snapshots__',\n '**/auto-import?(s).d.ts',\n '**/components.d.ts',\n]\n","import { getConfigOptions, interopDefault } from '~/utils'\nimport { GLOB_EXCLUDE } from '../globs'\nimport type { FlatGitignoreOptions } from 'eslint-config-flat-gitignore'\nimport type { ConfigFn } from '../types'\n\nexport type IgnoresConfig = (options: {\n enableGitignore?: boolean | Omit<FlatGitignoreOptions, 'name'>\n files?: ((files: string[]) => string[]) | string[]\n}) => ReturnType<ConfigFn>\n\nexport const ignores: IgnoresConfig = async (options) => {\n const { enableGitignore = true, files = [] } = options\n\n const gitIgnores: string[] = []\n if (enableGitignore) {\n const gitignore = await interopDefault(\n import('eslint-config-flat-gitignore'),\n )\n\n gitIgnores.push(...gitignore(getConfigOptions(enableGitignore)).ignores)\n }\n\n let ignores = [...GLOB_EXCLUDE, ...gitIgnores]\n\n if (typeof files === 'function') {\n ignores = files(ignores)\n } else {\n ignores = [...ignores, ...files]\n }\n\n return [\n {\n name: 'eslint/ignores',\n ignores: [...GLOB_EXCLUDE, ...ignores],\n },\n ]\n}\n","import { interopDefault } from '../utils'\nimport type { ConfigItem } from '../types'\n\nexport async function imports(): Promise<ConfigItem[]> {\n const pluginImport = await interopDefault(import('eslint-plugin-import-x'))\n\n return [\n {\n name: 'eslint/imports/rules',\n plugins: {\n import: pluginImport,\n },\n rules: {\n 'import/first': 'error',\n 'import/no-duplicates': 'error',\n 'import/no-mutable-exports': 'error',\n 'import/no-named-default': 'error',\n 'import/no-self-import': 'error',\n 'import/no-webpack-loader-syntax': 'error',\n\n 'import/newline-after-import': ['error', { count: 1 }],\n 'import/consistent-type-specifier-style': ['error', 'prefer-top-level'],\n },\n },\n ]\n}\n","import globals from 'globals'\nimport { GLOB_SRC, GLOB_SRC_EXT } from '../globs'\nimport { interopDefault } from '../utils'\nimport type { ConfigFn } from '../types'\n\nexport type JavascriptConfig = ConfigFn\n\nexport const javascript: JavascriptConfig = async (options) => {\n const { overrides = {} } = options\n\n const pluginUnusedImports = await interopDefault(\n import('eslint-plugin-unused-imports'),\n )\n\n return [\n {\n name: 'eslint/javascript/rules',\n languageOptions: {\n ecmaVersion: 2022,\n globals: {\n ...globals.browser,\n ...globals.es2021,\n ...globals.node,\n document: 'readonly',\n navigator: 'readonly',\n window: 'readonly',\n },\n parserOptions: {\n ecmaFeatures: {\n jsx: true,\n },\n ecmaVersion: 2022,\n sourceType: 'module',\n },\n sourceType: 'module',\n },\n linterOptions: {\n reportUnusedDisableDirectives: true,\n },\n plugins: {\n 'unused-imports': pluginUnusedImports,\n },\n rules: {\n 'accessor-pairs': [\n 'error',\n { enforceForClassMembers: true, setWithoutGet: true },\n ],\n\n 'array-callback-return': 'error',\n 'block-scoped-var': 'error',\n 'constructor-super': 'error',\n 'default-case-last': 'error',\n 'dot-notation': ['error', { allowKeywords: true }],\n 'eqeqeq': ['error', 'smart'],\n 'new-cap': [\n 'error',\n { capIsNew: false, newIsCap: true, properties: true },\n ],\n 'no-alert': 'error',\n 'no-array-constructor': 'error',\n 'no-async-promise-executor': 'error',\n 'no-caller': 'error',\n 'no-case-declarations': 'error',\n 'no-class-assign': 'error',\n 'no-compare-neg-zero': 'error',\n 'no-cond-assign': ['error', 'always'],\n 'no-console': ['error', { allow: ['warn', 'error'] }],\n 'no-const-assign': 'error',\n 'no-control-regex': 'error',\n 'no-debugger': 'error',\n 'no-delete-var': 'error',\n 'no-dupe-args': 'error',\n 'no-dupe-class-members': 'error',\n 'no-dupe-keys': 'error',\n 'no-duplicate-case': 'error',\n 'no-empty': ['error', { allowEmptyCatch: true }],\n 'no-empty-character-class': 'error',\n 'no-empty-pattern': 'error',\n 'no-eval': 'error',\n 'no-ex-assign': 'error',\n 'no-extend-native': 'error',\n 'no-extra-bind': 'error',\n 'no-extra-boolean-cast': 'error',\n 'no-fallthrough': 'error',\n 'no-func-assign': 'error',\n 'no-global-assign': 'error',\n 'no-implied-eval': 'error',\n 'no-import-assign': 'error',\n 'no-invalid-regexp': 'error',\n 'no-invalid-this': 'error',\n 'no-irregular-whitespace': 'error',\n 'no-iterator': 'error',\n 'no-labels': ['error', { allowLoop: false, allowSwitch: false }],\n 'no-lone-blocks': 'error',\n 'no-loss-of-precision': 'error',\n 'no-misleading-character-class': 'error',\n 'no-multi-str': 'error',\n 'no-new': 'error',\n 'no-new-func': 'error',\n 'no-new-native-nonconstructor': 'error',\n 'no-new-wrappers': 'error',\n 'no-obj-calls': 'error',\n 'no-octal': 'error',\n 'no-octal-escape': 'error',\n 'no-proto': 'error',\n 'no-prototype-builtins': 'error',\n 'no-redeclare': ['error', { builtinGlobals: false }],\n 'no-regex-spaces': 'error',\n 'no-restricted-globals': [\n 'error',\n { message: 'Use `globalThis` instead.', name: 'global' },\n { message: 'Use `globalThis` instead.', name: 'self' },\n ],\n 'no-restricted-properties': [\n 'error',\n {\n message:\n 'Use `Object.getPrototypeOf` or `Object.setPrototypeOf` instead.',\n property: '__proto__',\n },\n {\n message: 'Use `Object.defineProperty` instead.',\n property: '__defineGetter__',\n },\n {\n message: 'Use `Object.defineProperty` instead.',\n property: '__defineSetter__',\n },\n {\n message: 'Use `Object.getOwnPropertyDescriptor` instead.',\n property: '__lookupGetter__',\n },\n {\n message: 'Use `Object.getOwnPropertyDescriptor` instead.',\n property: '__lookupSetter__',\n },\n ],\n 'no-restricted-syntax': [\n 'error',\n 'TSEnumDeclaration[const=true]',\n 'TSExportAssignment',\n ],\n 'no-self-assign': ['error', { props: true }],\n 'no-self-compare': 'error',\n 'no-sequences': 'error',\n 'no-shadow-restricted-names': 'error',\n 'no-sparse-arrays': 'error',\n 'no-template-curly-in-string': 'error',\n 'no-this-before-super': 'error',\n 'no-throw-literal': 'error',\n 'no-undef': 'error',\n 'no-undef-init': 'error',\n 'no-unexpected-multiline': 'error',\n 'no-unmodified-loop-condition': 'error',\n 'no-unneeded-ternary': ['error', { defaultAssignment: false }],\n 'no-unreachable': 'error',\n 'no-unreachable-loop': 'error',\n 'no-unsafe-finally': 'error',\n 'no-unsafe-negation': 'error',\n 'no-unused-expressions': [\n 'error',\n {\n allowShortCircuit: true,\n allowTaggedTemplates: true,\n allowTernary: true,\n },\n ],\n 'no-unused-vars': [\n 'error',\n {\n args: 'none',\n caughtErrors: 'none',\n ignoreRestSiblings: true,\n vars: 'all',\n },\n ],\n 'no-use-before-define': [\n 'error',\n { classes: false, functions: false, variables: true },\n ],\n 'no-useless-backreference': 'error',\n 'no-useless-call': 'error',\n 'no-useless-catch': 'error',\n 'no-useless-computed-key': 'error',\n 'no-useless-constructor': 'error',\n 'no-useless-rename': 'error',\n 'no-useless-return': 'error',\n 'no-var': 'error',\n 'no-with': 'error',\n 'object-shorthand': [\n 'error',\n 'always',\n {\n avoidQuotes: true,\n ignoreConstructors: false,\n },\n ],\n 'one-var': ['error', { initialized: 'never' }],\n 'prefer-arrow-callback': [\n 'error',\n {\n allowNamedFunctions: false,\n allowUnboundThis: true,\n },\n ],\n 'prefer-const': [\n 'error',\n {\n destructuring: 'all',\n ignoreReadBeforeAssign: true,\n },\n ],\n 'prefer-exponentiation-operator': 'error',\n 'prefer-promise-reject-errors': 'error',\n 'prefer-regex-literals': ['error', { disallowRedundantWrapping: true }],\n 'prefer-rest-params': 'error',\n 'prefer-spread': 'error',\n 'prefer-template': 'error',\n 'symbol-description': 'error',\n 'unicode-bom': ['error', 'never'],\n 'unused-imports/no-unused-imports': 'warn',\n\n 'unused-imports/no-unused-vars': [\n 'error',\n {\n args: 'after-used',\n argsIgnorePattern: '^_',\n vars: 'all',\n varsIgnorePattern: '^_',\n },\n ],\n 'use-isnan': [\n 'error',\n { enforceForIndexOf: true, enforceForSwitchCase: true },\n ],\n 'valid-typeof': ['error', { requireStringLiterals: true }],\n 'vars-on-top': 'error',\n 'yoda': ['error', 'never'],\n\n ...overrides,\n },\n },\n {\n name: 'eslint/scripts-overrides/disables/cli',\n files: [`scripts/${GLOB_SRC}`, `cli.${GLOB_SRC_EXT}`],\n rules: {\n 'no-console': 'off',\n },\n },\n ]\n}\n","import { interopDefault } from '../utils'\nimport type { ConfigItem } from '../types'\n\nexport async function jsdoc(): Promise<ConfigItem[]> {\n return [\n {\n name: 'eslint/jsdoc/rules',\n plugins: {\n jsdoc: await interopDefault(import('eslint-plugin-jsdoc')),\n },\n rules: {\n 'jsdoc/check-access': 'warn',\n 'jsdoc/check-param-names': 'warn',\n 'jsdoc/check-property-names': 'warn',\n 'jsdoc/check-types': 'warn',\n 'jsdoc/empty-tags': 'warn',\n 'jsdoc/implements-on-classes': 'warn',\n 'jsdoc/no-defaults': 'warn',\n 'jsdoc/no-multi-asterisks': 'warn',\n 'jsdoc/require-param-name': 'warn',\n 'jsdoc/require-property': 'warn',\n 'jsdoc/require-property-description': 'warn',\n 'jsdoc/require-property-name': 'warn',\n 'jsdoc/require-returns-check': 'warn',\n 'jsdoc/require-returns-description': 'warn',\n 'jsdoc/require-yields-check': 'warn',\n\n 'jsdoc/check-alignment': 'warn',\n 'jsdoc/multiline-blocks': 'warn',\n },\n },\n ]\n}\n","import { GLOB_JSON, GLOB_JSON5, GLOB_JSONC } from '../globs'\nimport { interopDefault } from '../utils'\nimport type { ConfigFn } from '../types'\n\nexport type JsoncConfig = ConfigFn\n\nexport const jsonc: JsoncConfig = async (options) => {\n const { overrides = {} } = options\n\n const [pluginJsonc, parserJsonc] = await Promise.all([\n interopDefault(import('eslint-plugin-jsonc')),\n interopDefault(import('jsonc-eslint-parser')),\n ] as const)\n\n return [\n {\n name: 'eslint/jsonc/setup',\n plugins: {\n jsonc: pluginJsonc,\n },\n },\n {\n name: 'eslint/jsonc/rules',\n files: [GLOB_JSON, GLOB_JSON5, GLOB_JSONC],\n languageOptions: {\n parser: parserJsonc,\n },\n rules: {\n 'jsonc/no-bigint-literals': 'error',\n 'jsonc/no-binary-expression': 'error',\n 'jsonc/no-binary-numeric-literals': 'error',\n 'jsonc/no-dupe-keys': 'error',\n 'jsonc/no-escape-sequence-in-identifier': 'error',\n 'jsonc/no-floating-decimal': 'error',\n 'jsonc/no-hexadecimal-numeric-literals': 'error',\n 'jsonc/no-infinity': 'error',\n 'jsonc/no-multi-str': 'error',\n 'jsonc/no-nan': 'error',\n 'jsonc/no-number-props': 'error',\n 'jsonc/no-numeric-separators': 'error',\n 'jsonc/no-octal': 'error',\n 'jsonc/no-octal-escape': 'error',\n 'jsonc/no-octal-numeric-literals': 'error',\n 'jsonc/no-parenthesized': 'error',\n 'jsonc/no-plus-sign': 'error',\n 'jsonc/no-regexp-literals': 'error',\n 'jsonc/no-sparse-arrays': 'error',\n 'jsonc/no-template-literals': 'error',\n 'jsonc/no-undefined-value': 'error',\n 'jsonc/no-unicode-codepoint-escapes': 'error',\n 'jsonc/no-useless-escape': 'error',\n 'jsonc/space-unary-ops': 'error',\n 'jsonc/valid-json-number': 'error',\n 'jsonc/vue-custom-block/no-parsing-error': 'error',\n\n 'jsonc/array-bracket-spacing': ['error', 'never'],\n 'jsonc/comma-style': ['error', 'last'],\n 'jsonc/key-spacing': [\n 'error',\n { afterColon: true, beforeColon: false },\n ],\n 'jsonc/object-curly-newline': [\n 'error',\n { consistent: true, multiline: true },\n ],\n 'jsonc/object-curly-spacing': ['error', 'always'],\n 'jsonc/object-property-newline': [\n 'error',\n { allowMultiplePropertiesPerLine: true },\n ],\n 'jsonc/quote-props': 'error',\n 'jsonc/quotes': 'error',\n\n ...overrides,\n },\n },\n ]\n}\n","import { GLOB_MARKDOWN, GLOB_MARKDOWN_CODE } from '../globs'\nimport { interopDefault, parserPlain } from '../utils'\nimport type { ConfigFn, ConfigItem, OptionsOverrides } from '../types'\n\nexport type MarkdownConfig = (\n options: {\n componentExts?: string[]\n /**\n * @deprecated remove this option\n */\n mdx?: boolean\n } & OptionsOverrides,\n) => ReturnType<ConfigFn>\n\nexport const markdown: MarkdownConfig = async (options) => {\n const {\n mdx: _enableMdx = false,\n componentExts = [],\n overrides = {},\n } = options\n\n const pluginMarkdown = await interopDefault(import('@eslint/markdown'))\n\n const _markdown: ConfigItem[] = [\n {\n name: 'eslint/markdown/setup',\n plugins: {\n markdown: pluginMarkdown,\n },\n },\n {\n name: 'eslint/markdown/processor',\n files: [GLOB_MARKDOWN],\n languageOptions: {\n ecmaVersion: 'latest',\n parser: parserPlain,\n sourceType: 'module',\n },\n },\n {\n name: 'eslint/markdown/disables',\n files: [\n GLOB_MARKDOWN_CODE,\n ...componentExts.map((ext) => `${GLOB_MARKDOWN}/**/*.${ext}`),\n ],\n languageOptions: {\n parserOptions: {\n ecmaFeatures: {\n impliedStrict: true,\n },\n },\n },\n rules: {\n 'no-alert': 'off',\n 'no-console': 'off',\n 'no-undef': 'off',\n 'no-unused-expressions': 'off',\n 'no-unused-vars': 'off',\n\n 'node/prefer-global/process': 'off',\n\n '@typescript-eslint/consistent-type-imports': 'off',\n '@typescript-eslint/no-namespace': 'off',\n '@typescript-eslint/no-redeclare': 'off',\n '@typescript-eslint/no-require-imports': 'off',\n '@typescript-eslint/no-unused-vars': 'off',\n '@typescript-eslint/no-use-before-define': 'off',\n '@typescript-eslint/no-var-requires': 'off',\n\n 'unicode-bom': 'off',\n 'unused-imports/no-unused-imports': 'off',\n 'unused-imports/no-unused-vars': 'off',\n\n '@typescript-eslint/await-thenable': 'off',\n '@typescript-eslint/dot-notation': 'off',\n '@typescript-eslint/no-floating-promises': 'off',\n '@typescript-eslint/no-for-in-array': 'off',\n '@typescript-eslint/no-implied-eval': 'off',\n '@typescript-eslint/no-misused-promises': 'off',\n '@typescript-eslint/no-throw-literal': 'off',\n '@typescript-eslint/no-unnecessary-type-assertion': 'off',\n '@typescript-eslint/no-unsafe-argument': 'off',\n '@typescript-eslint/no-unsafe-assignment': 'off',\n '@typescript-eslint/no-unsafe-call': 'off',\n '@typescript-eslint/no-unsafe-member-access': 'off',\n '@typescript-eslint/no-unsafe-return': 'off',\n '@typescript-eslint/restrict-plus-operands': 'off',\n '@typescript-eslint/restrict-template-expressions': 'off',\n '@typescript-eslint/unbound-method': 'off',\n\n ...overrides,\n },\n },\n ]\n\n return _markdown\n}\n","import { interopDefault } from '../utils'\nimport type { ConfigItem } from '../types'\n\nexport async function node(): Promise<ConfigItem[]> {\n const pluginNode = await interopDefault(import('eslint-plugin-n'))\n\n return [\n {\n name: 'eslint/node/rules',\n plugins: {\n n: pluginNode,\n },\n rules: {\n 'n/handle-callback-err': ['error', '^(err|error)$'],\n 'n/no-deprecated-api': 'error',\n 'n/no-exports-assign': 'error',\n 'n/no-new-require': 'error',\n 'n/no-path-concat': 'error',\n 'n/prefer-global/buffer': ['error', 'never'],\n 'n/prefer-global/process': ['error', 'never'],\n 'n/process-exit-as-throw': 'error',\n },\n },\n ]\n}\n","import { interopDefault } from '../utils'\nimport type { ConfigItem } from '../types'\n\n/**\n * Perfectionist plugin for props and items sorting.\n *\n * @see https://github.com/azat-io/eslint-plugin-perfectionist\n */\nexport async function perfectionist(): Promise<ConfigItem[]> {\n const pluginPerfectionist = await interopDefault(\n import('eslint-plugin-perfectionist'),\n )\n\n return [\n {\n name: 'eslint/perfectionist/setup',\n plugins: {\n perfectionist: pluginPerfectionist,\n },\n rules: {\n 'perfectionist/sort-exports': [\n 'error',\n { order: 'asc', type: 'natural' },\n ],\n 'perfectionist/sort-imports': [\n 'error',\n {\n groups: [\n 'value-builtin',\n 'value-external',\n 'value-internal',\n ['value-parent', 'value-sibling', 'value-index'],\n 'side-effect',\n 'ts-equals-import',\n 'type-import',\n ['type-parent', 'type-sibling', 'type-index', 'type-internal'],\n 'unknown',\n ],\n newlinesBetween: 'ignore',\n newlinesInside: 'ignore',\n order: 'asc',\n type: 'natural',\n },\n ],\n 'perfectionist/sort-named-exports': [\n 'error',\n { order: 'asc', type: 'natural' },\n ],\n 'perfectionist/sort-named-imports': [\n 'error',\n { order: 'asc', type: 'natural' },\n ],\n },\n },\n ]\n}\n","import {\n GLOB_CSS,\n GLOB_LESS,\n GLOB_MARKDOWN,\n GLOB_MDX,\n GLOB_POSTCSS,\n GLOB_SCSS,\n GLOB_TOML,\n GLOB_YAML,\n} from '../globs'\nimport { interopDefault, parserPlain } from '../utils'\nimport type { RequiredOptions } from 'prettier'\nimport type { ConfigItem } from '../types'\n\nexport type PrettierRequiredOptions = Partial<RequiredOptions>\n\nexport type PrettierConfig = ({\n options,\n}: PrettierRequiredOptions & {\n tailwindcss?: boolean\n}) => Promise<ConfigItem[]>\n\nexport const prettier: PrettierConfig = async ({ tailwindcss, ...options }) => {\n const [pluginPrettier, recommendedPrettier] = await Promise.all([\n interopDefault(import('eslint-plugin-prettier')),\n interopDefault(import('eslint-plugin-prettier/recommended')),\n ])\n\n const defaultPrettierOptions: PrettierRequiredOptions = {\n quoteProps: 'consistent',\n semi: false,\n singleQuote: true,\n jsxSingleQuote: true,\n }\n\n const plainFileRules: ConfigItem[] = [\n {\n name: 'eslint/prettier/markdown',\n files: [GLOB_MARKDOWN],\n parser: 'markdown',\n },\n {\n name: 'eslint/prettier/mdx',\n files: [GLOB_MDX],\n parser: 'mdx',\n },\n {\n name: 'eslint/prettier/html',\n files: ['**/*.html'],\n parser: 'html',\n },\n {\n name: 'eslint/prettier/css',\n files: [GLOB_CSS, GLOB_POSTCSS],\n parser: 'css',\n },\n {\n name: 'eslint/prettier/scss',\n files: [GLOB_SCSS],\n parser: 'scss',\n },\n {\n name: 'eslint/prettier/less',\n files: [GLOB_LESS],\n parser: 'less',\n },\n {\n name: 'eslint/prettier/yaml',\n files: [GLOB_YAML],\n parser: 'yaml',\n },\n {\n name: 'eslint/prettier/graphql',\n files: ['**/*.graphql'],\n parser: 'graphql',\n },\n ].map((rule) => ({\n name: rule.name,\n files: rule.files,\n languageOptions: {\n parser: parserPlain,\n },\n rules: {\n 'prettier/prettier': [\n 'warn',\n {\n parser: rule.parser,\n\n ...defaultPrettierOptions,\n ...options,\n },\n ],\n },\n }))\n\n return [\n {\n name: 'eslint/prettier/setup',\n plugins: {\n prettier: pluginPrettier,\n },\n },\n {\n name: 'eslint/prettier/rules',\n ignores: [GLOB_TOML],\n rules: {\n // disable rules with prettier conflicts\n ...recommendedPrettier.rules,\n\n // eslint-plugin-prettier recommended rules\n ...{\n 'arrow-body-style': 'off',\n 'prefer-arrow-callback': 'off',\n },\n\n 'prettier/prettier': [\n 'warn',\n {\n plugins: tailwindcss ? ['prettier-plugin-tailwindcss'] : [],\n ...defaultPrettierOptions,\n ...options,\n },\n ],\n },\n },\n\n ...plainFileRules,\n ]\n}\n","import type { ConfigItem } from '../types'\n\n/**\n * Sort package.json\n *\n * Requires `jsonc` config\n */\nexport async function sortPackageJson(): Promise<ConfigItem[]> {\n return [\n {\n name: 'eslint/sort/package-json',\n files: ['**/package.json'],\n rules: {\n 'jsonc/sort-array-values': [\n 'error',\n {\n order: { type: 'asc' },\n pathPattern: '^files$',\n },\n ],\n 'jsonc/sort-keys': [\n 'error',\n {\n order: [\n 'publisher',\n 'name',\n 'displayName',\n 'type',\n 'version',\n 'private',\n 'packageManager',\n 'description',\n 'author',\n 'license',\n 'funding',\n 'homepage',\n 'repository',\n 'bugs',\n 'keywords',\n 'categories',\n 'sideEffects',\n 'exports',\n 'main',\n 'module',\n 'unpkg',\n 'jsdelivr',\n 'types',\n 'typesVersions',\n 'bin',\n 'icon',\n 'files',\n 'engines',\n 'activationEvents',\n 'contributes',\n 'scripts',\n 'peerDependencies',\n 'peerDependenciesMeta',\n 'dependencies',\n 'optionalDependencies',\n 'devDependencies',\n 'pnpm',\n 'overrides',\n 'resolutions',\n 'husky',\n 'simple-git-hooks',\n 'lint-staged',\n 'eslintConfig',\n ],\n pathPattern: '^$',\n },\n {\n order: { type: 'asc' },\n pathPattern:\n '^(?:dev|peer|optional|bundled)?[Dd]ependencies(Meta)?$',\n },\n {\n order: { type: 'asc' },\n pathPattern: '^(?:resolutions|overrides|pnpm.overrides)$',\n },\n {\n order: ['types', 'import', 'require', 'default'],\n pathPattern: '^exports.*$',\n },\n ],\n },\n },\n ]\n}\n/**\n * Sort tsconfig.json\n *\n * Requires `jsonc` config\n */\n\nexport async function sortTsconfig(): Promise<ConfigItem[]> {\n return [\n {\n name: 'eslint/sort/tsconfig-json',\n files: ['**/tsconfig.json', '**/tsconfig.*.json'],\n rules: {\n 'jsonc/sort-keys': [\n 'error',\n {\n order: [\n 'extends',\n 'compilerOptions',\n 'references',\n 'files',\n 'include',\n 'exclude',\n ],\n pathPattern: '^$',\n },\n {\n order: [\n /* Projects */\n 'incremental',\n 'composite',\n 'tsBuildInfoFile',\n 'disableSourceOfProjectReferenceRedirect',\n 'disableSolutionSearching',\n 'disableReferencedProjectLoad',\n /* Language and Environment */\n 'target',\n 'jsx',\n 'jsxFactory',\n 'jsxFragmentFactory',\n 'jsxImportSource',\n 'lib',\n 'moduleDetection',\n 'noLib',\n 'reactNamespace',\n 'useDefineForClassFields',\n 'emitDecoratorMetadata',\n 'experimentalDecorators',\n /* Modules */\n 'baseUrl',\n 'rootDir',\n 'rootDirs',\n 'customConditions',\n 'module',\n 'moduleResolution',\n 'moduleSuffixes',\n 'noResolve',\n 'paths',\n 'resolveJsonModule',\n 'resolvePackageJsonExports',\n 'resolvePackageJsonImports',\n 'typeRoots',\n 'types',\n 'allowArbitraryExtensions',\n 'allowImportingTsExtensions',\n 'allowUmdGlobalAccess',\n /* JavaScript Support */\n 'allowJs',\n 'checkJs',\n 'maxNodeModuleJsDepth',\n /* Type Checking */\n 'strict',\n 'strictBindCallApply',\n 'strictFunctionTypes',\n 'strictNullChecks',\n 'strictPropertyInitialization',\n 'allowUnreachableCode',\n 'allowUnusedLabels',\n 'alwaysStrict',\n 'exactOptionalPropertyTypes',\n 'noFallthroughCasesInSwitch',\n 'noImplicitAny',\n 'noImplicitOverride',\n 'noImplicitReturns',\n 'noImplicitThis',\n 'noPropertyAccessFromIndexSignature',\n 'noUncheckedIndexedAccess',\n 'noUnusedLocals',\n 'noUnusedParameters',\n 'useUnknownInCatchVariables',\n /* Emit */\n 'declaration',\n 'declarationDir',\n 'declarationMap',\n 'downlevelIteration',\n 'emitBOM',\n 'emitDeclarationOnly',\n 'importHelpers',\n 'importsNotUsedAsValues',\n 'inlineSourceMap',\n 'inlineSources',\n 'mapRoot',\n 'newLine',\n 'noEmit',\n 'noEmitHelpers',\n 'noEmitOnError',\n 'outDir',\n 'outFile',\n 'preserveConstEnums',\n 'preserveValueImports',\n 'removeComments',\n 'sourceMap',\n 'sourceRoot',\n 'stripInternal',\n /* Interop Constraints */\n 'allowSyntheticDefaultImports',\n 'esModuleInterop',\n 'forceConsistentCasingInFileNames',\n 'isolatedModules',\n 'preserveSymlinks',\n 'verbatimModuleSyntax',\n /* Completeness */\n 'skipDefaultLibCheck',\n 'skipLibCheck',\n ],\n pathPattern: '^compilerOptions$',\n },\n ],\n },\n },\n ]\n}\n","import { GLOB_TESTS } from '../globs'\nimport { interopDefault } from '../utils'\nimport type { ConfigFn } from '../types'\n\nexport type TestConfig = ConfigFn\n\nexport const test: TestConfig = async (options) => {\n const { overrides = {} } = options\n\n const [pluginVitest, pluginNoOnlyTests] = await Promise.all([\n interopDefault(import('@vitest/eslint-plugin')),\n // @ts-expect-error missing types\n interopDefault(import('eslint-plugin-no-only-tests')),\n ] as const)\n\n return [\n {\n name: 'eslint/test/setup',\n plugins: {\n test: {\n ...pluginVitest,\n rules: {\n ...pluginVitest.rules,\n // extend `test/no-only-tests` rule\n ...pluginNoOnlyTests.rules,\n },\n },\n },\n },\n {\n name: 'eslint/test/rules',\n files: GLOB_TESTS,\n rules: {\n 'node/prefer-global/process': 'off',\n\n 'test/consistent-test-it': [\n 'error',\n { fn: 'it', withinDescribe: 'it' },\n ],\n 'test/no-identical-title': 'error',\n 'test/no-import-node-test': 'error',\n 'test/no-only-tests': 'error',\n 'test/prefer-hooks-in-order': 'error',\n 'test/prefer-lowercase-title': 'error',\n\n '@typescript-eslint/explicit-function-return-type': 'off',\n\n ...overrides,\n },\n },\n ]\n}\n","import { GLOB_TOML } from '..'\nimport { interopDefault } from '../utils'\nimport type { ConfigFn } from '..'\n\nexport type TomlConfig = ConfigFn\n\nexport const toml: TomlConfig = async (options) => {\n const { overrides = {} } = options\n\n const [pluginToml, parserToml] = await Promise.all([\n interopDefault(import('eslint-plugin-toml')),\n interopDefault(import('toml-eslint-parser')),\n ] as const)\n\n return [\n {\n name: 'eslint/toml/setup',\n plugins: {\n toml: pluginToml,\n },\n },\n {\n name: 'eslint/toml/rules',\n files: [GLOB_TOML],\n languageOptions: {\n parser: parserToml,\n },\n rules: {\n 'toml/comma-style': 'error',\n 'toml/keys-order': 'error',\n 'toml/no-space-dots': 'error',\n 'toml/no-unreadable-number-separator': 'error',\n 'toml/precision-of-fractional-seconds': 'error',\n 'toml/precision-of-integer': 'error',\n 'toml/tables-order': 'error',\n\n 'toml/vue-custom-block/no-parsing-error': 'error',\n\n 'toml/array-bracket-newline': 'error',\n 'toml/array-bracket-spacing': 'error',\n 'toml/array-element-newline': 'error',\n 'toml/indent': ['error', 2],\n 'toml/inline-table-curly-spacing': 'error',\n 'toml/key-spacing': 'error',\n 'toml/padding-line-between-pairs': 'error',\n 'toml/padding-line-between-tables': 'error',\n 'toml/quoted-keys': 'error',\n 'toml/spaced-comment': 'error',\n 'toml/table-bracket-spacing': 'error',\n\n ...overrides,\n },\n },\n ]\n}\n","import process from 'node:process'\nimport {\n GLOB_ASTRO_TS,\n GLOB_MARKDOWN,\n GLOB_SRC,\n GLOB_TS,\n GLOB_TSX,\n} from '../globs'\nimport { interopDefault } from '../utils'\nimport type {\n ConfigFn,\n ConfigItem,\n OptionsComponentExts,\n OptionsOverrides,\n OptionsTypeScriptParserOptions,\n OptionsTypeScriptWithTypes,\n} from '../types'\n\nexport type TypeScriptConfig = (\n options?: OptionsComponentExts &\n OptionsTypeScriptWithTypes &\n OptionsTypeScriptParserOptions &\n OptionsOverrides & {\n enableSolid?: boolean\n },\n) => ReturnType<ConfigFn>\n\nconst typeAwareRules: ConfigItem['rules'] = {\n 'dot-notation': 'off',\n 'no-implied-eval': 'off',\n '@typescript-eslint/await-thenable': 'error',\n '@typescript-eslint/dot-notation': ['error', { allowKeywords: true }],\n '@typescript-eslint/no-floating-promises': 'error',\n '@typescript-eslint/no-for-in-array': 'error',\n '@typescript-eslint/no-implied-eval': 'error',\n '@typescript-eslint/no-misused-promises': 'error',\n '@typescript-eslint/no-unnecessary-type-assertion': 'error',\n '@typescript-eslint/no-unsafe-argument': 'error',\n '@typescript-eslint/no-unsafe-assignment': 'error',\n '@typescript-eslint/no-unsafe-call': 'error',\n '@typescript-eslint/no-unsafe-member-access': 'error',\n '@typescript-eslint/no-unsafe-return': 'error',\n '@typescript-eslint/promise-function-async': 'error',\n '@typescript-eslint/restrict-plus-operands': 'error',\n '@typescript-eslint/restrict-template-expressions': 'error',\n '@typescript-eslint/return-await': ['error', 'in-try-catch'],\n '@typescript-eslint/strict-boolean-expressions': [\n 'error',\n { allowNullableBoolean: true, allowNullableObject: true },\n ],\n '@typescript-eslint/switch-exhaustiveness-check': 'error',\n '@typescript-eslint/unbound-method': 'error',\n}\n\nexport const typescript: TypeScriptConfig = async (options) => {\n const {\n overrides = {},\n componentExts = [],\n parserOptions = {},\n tsconfigPath,\n enableSolid = false,\n } = options ?? {}\n\n const isTypeAware = !!tsconfigPath\n\n const [pluginTs, parserTs] = await Promise.all([\n interopDefault(import('@typescript-eslint/eslint-plugin')),\n interopDefault(import('@typescript-eslint/parser')),\n ] as const)\n\n return [\n {\n // Install the plugins without globs, so they can be configured separately.\n name: 'eslint/typescript/setup',\n plugins: {\n '@typescript-eslint': pluginTs,\n ...(enableSolid\n ? {\n solid: await interopDefault(import('eslint-plugin-solid')),\n }\n : {}),\n },\n },\n {\n name: 'eslint/typescript/rules',\n files: [GLOB_SRC, ...componentExts.map((ext) => `**/*.${ext}`)],\n languageOptions: {\n parser: parserTs,\n parserOptions: {\n extraFileExtensions: componentExts.map((ext) => `.${ext}`),\n sourceType: 'module',\n\n ...(tsconfigPath\n ? {\n project: [tsconfigPath],\n tsconfigRootDir: process.cwd(),\n }\n : {}),\n ...(parserOptions as any),\n },\n },\n rules: {\n ...pluginTs.configs['eslint-recommended'].overrides![0].rules!,\n ...pluginTs.configs.strict.rules!,\n\n ...(enableSolid\n ? {\n 'solid/jsx-no-undef': ['error', { typescriptEnabled: true }],\n 'solid/no-unknown-namespaces': 'off',\n }\n : {}),\n 'no-dupe-class-members': 'off',\n 'no-redeclare': 'off',\n 'no-use-before-define': 'off',\n 'no-useless-constructor': 'off',\n '@typescript-eslint/ban-ts-comment': [\n 'error',\n { 'ts-expect-error': 'allow-with-description' },\n ],\n '@typescript-eslint/consistent-type-definitions': [\n 'error',\n 'interface',\n ],\n '@typescript-eslint/consistent-type-imports': [\n 'error',\n {\n disallowTypeAnnotations: false,\n fixStyle: 'separate-type-imports',\n prefer: 'type-imports',\n },\n ],\n\n // https://www.totaltypescript.com/method-shorthand-syntax-considered-harmful\n '@typescript-eslint/method-signature-style': ['error', 'property'],\n '@typescript-eslint/no-dupe-class-members': 'error',\n '@typescript-eslint/no-dynamic-delete': 'off',\n '@typescript-eslint/no-empty-object-type': [\n 'error',\n { allowInterfaces: 'always' },\n ],\n '@typescript-eslint/no-explicit-any': 'off',\n '@typescript-eslint/no-extraneous-class': 'off',\n '@typescript-eslint/no-import-type-side-effects': 'error',\n '@typescript-eslint/no-invalid-void-type': 'off',\n '@typescript-eslint/no-non-null-assertion': 'off',\n '@typescript-eslint/no-redeclare': ['error', { builtinGlobals: false }],\n '@typescript-eslint/no-require-imports': 'error',\n '@typescript-eslint/no-unused-expressions': [\n 'error',\n {\n allowShortCircuit: true,\n allowTaggedTemplates: true,\n allowTernary: true,\n },\n ],\n '@typescript-eslint/no-unused-vars': 'off',\n '@typescript-eslint/no-use-before-define': [\n 'error',\n { classes: false, functions: false, variables: true },\n ],\n '@typescript-eslint/no-useless-constructor': 'off',\n '@typescript-eslint/no-wrapper-object-types': 'error',\n '@typescript-eslint/triple-slash-reference': 'off',\n '@typescript-eslint/unified-signatures': 'off',\n\n ...overrides,\n },\n },\n ...((isTypeAware\n ? [\n {\n name: 'eslint/typescript/rules-type-aware',\n files: [GLOB_TS, GLOB_TSX],\n ignores: [`${GLOB_MARKDOWN}/**`, `${GLOB_ASTRO_TS}/**`],\n rules: {\n ...typeAwareRules,\n },\n },\n ]\n : []) satisfies ConfigItem[]),\n {\n name: 'eslint/typescript/dts-overrides',\n files: ['**/*.d.ts'],\n rules: {\n 'eslint-comments/no-unlimited-disable': 'off',\n 'import/no-duplicates': 'off',\n 'no-restricted-syntax': 'off',\n 'unused-imports/no-unused-vars': 'off',\n },\n },\n {\n name: 'eslint/typescript/disables/test',\n files: ['**/*.{test,spec}.ts?(x)'],\n rules: {\n 'no-unused-expressions': 'off',\n },\n },\n {\n name: 'eslint/typescript/disables/cjs',\n files: ['**/*.js', '**/*.cjs'],\n rules: {\n '@typescript-eslint/no-require-imports': 'off',\n '@typescript-eslint/no-var-requires': 'off',\n },\n },\n ]\n}\n","import { interopDefault } from '../utils'\nimport type { ConfigItem } from '../types'\n\nexport async function unicorn(): Promise<ConfigItem[]> {\n const pluginUnicorn = await interopDefault(import('eslint-plugin-unicorn'))\n\n return [\n {\n name: 'eslint/unicorn/rules',\n plugins: {\n unicorn: pluginUnicorn,\n },\n rules: {\n 'unicorn/consistent-empty-array-spread': 'error',\n 'unicorn/escape-case': 'error',\n 'unicorn/new-for-builtins': 'error',\n // Pass error message when throwing errors\n 'unicorn/error-message': 'error',\n // Uppercase regex escapes\n 'unicorn/consistent-function-scoping': [\n 'error',\n { checkArrowFunctions: false },\n ],\n 'unicorn/no-instanceof-builtins': 'error',\n // Ban `new Array` as `Array` constructor's params are ambiguous\n 'unicorn/no-new-array': 'error',\n // Prevent deprecated `new Buffer()`\n 'unicorn/no-new-buffer': 'error',\n // Lowercase number formatting for octal, hex, binary (0x1'error' instead of 0X1'error')\n 'unicorn/number-literal-case': 'error',\n // textContent instead of innerText\n 'unicorn/prefer-dom-node-text-content': 'error',\n // includes over indexOf when checking for existence\n 'unicorn/prefer-includes': 'error',\n // Prefer using the node: protocol\n 'unicorn/prefer-node-protocol': 'error',\n // Prefer using number properties like `Number.isNaN` rather than `isNaN`\n 'unicorn/prefer-number-properties': 'error',\n // String methods startsWith/endsWith instead of more complicated stuff\n 'unicorn/prefer-string-starts-ends-with': 'error',\n // Enforce throwing type error when throwing error while checking typeof\n 'unicorn/prefer-type-error': 'error',\n // Use new when throwing error\n 'unicorn/throw-new-error': 'error',\n },\n },\n ]\n}\n","import { GLOB_VUE } from '../globs'\nimport { interopDefault } from '../utils'\nimport type { ConfigFn, OptionsHasTypeScript, OptionsOverrides } from '../types'\n\nexport type VueConfig = (\n options: OptionsHasTypeScript & OptionsOverrides,\n) => ReturnType<ConfigFn>\n\nexport const vue: VueConfig = async (options = {}) => {\n const { overrides = {}, typescript: isTypescript } = options\n\n const [pluginVue, parserVue] = await Promise.all([\n interopDefault(import('eslint-plugin-vue')),\n interopDefault(import('vue-eslint-parser')),\n ] as const)\n\n return [\n {\n name: 'eslint/vue/setup',\n plugins: {\n vue: pluginVue,\n },\n },\n {\n name: 'eslint/vue/rules',\n files: [GLOB_VUE],\n languageOptions: {\n parser: parserVue,\n parserOptions: {\n ecmaFeatures: {\n jsx: true,\n },\n extraFileExtensions: ['.vue'],\n parser: isTypescript\n ? ((await interopDefault(\n import('@typescript-eslint/parser'),\n )) as any)\n : null,\n sourceType: 'module',\n },\n },\n processor: pluginVue.processors['.vue'],\n rules: {\n ...pluginVue.configs.base.rules,\n\n ...(pluginVue.configs['flat/essential']\n .map((c) => c.rules)\n .reduce((acc, c) => ({ ...acc, ...c }), {}) as any),\n ...(pluginVue.configs['flat/strongly-recommended']\n .map((c) => c.rules)\n .reduce((acc, c) => ({ ...acc, ...c }), {}) as any),\n ...(pluginVue.configs['flat/recommended']\n .map((c) => c.rules)\n .reduce((acc, c) => ({ ...acc, ...c }), {}) as any),\n\n 'node/prefer-global/process': 'off',\n\n 'vue/block-order': [\n 'error',\n {\n order: ['script', 'template', 'style'],\n },\n ],\n 'vue/component-name-in-template-casing': [\n 'error',\n 'PascalCase',\n {\n registeredComponentsOnly: false,\n },\n ],\n 'vue/component-options-name-casing': ['error', 'PascalCase'],\n 'vue/custom-event-name-casing': ['error', 'camelCase'],\n 'vue/define-macros-order': [\n 'error',\n {\n order: [\n 'defineOptions',\n 'defineProps',\n 'defineEmits',\n 'defineSlots',\n ],\n },\n ],\n 'vue/dot-location': ['error', 'property'],\n 'vue/dot-notation': ['error', { allowKeywords: true }],\n 'vue/eqeqeq': ['error', 'smart'],\n 'vue/html-indent': ['error', 2],\n 'vue/html-quotes': ['error', 'double'],\n 'vue/max-attributes-per-line': 'off',\n 'vue/multi-word-component-names': 'off',\n 'vue/no-dupe-keys': 'off',\n 'vue/no-empty-pattern': 'error',\n 'vue/no-irregular-whitespace': 'error',\n 'vue/no-loss-of-precision': 'error',\n 'vue/no-restricted-syntax': [\n 'error',\n 'DebuggerStatement',\n 'LabeledStatement',\n 'WithStatement',\n ],\n 'vue/no-restricted-v-bind': ['error', '/^v-/'],\n 'vue/no-setup-props-reactivity-loss': 'off',\n 'vue/no-sparse-arrays': 'error',\n 'vue/no-unused-refs': 'error',\n 'vue/no-useless-v-bind': 'error',\n 'vue/no-v-html': 'off',\n 'vue/object-shorthand': [\n 'error',\n 'always',\n {\n avoidQuotes: true,\n ignoreConstructors: false,\n },\n ],\n 'vue/prefer-separate-static-class': 'error',\n 'vue/prefer-template': 'error',\n 'vue/require-default-prop': 'off',\n 'vue/require-prop-types': 'off',\n 'vue/space-infix-ops': 'error',\n 'vue/space-unary-ops': ['error', { nonwords: false, words: true }],\n\n 'vue/array-bracket-spacing': ['error', 'never'],\n 'vue/arrow-spacing': ['error', { after: true, before: true }],\n 'vue/block-spacing': ['error', 'always'],\n 'vue/block-tag-newline': [\n 'error',\n {\n multiline: 'always',\n singleline: 'always',\n },\n ],\n 'vue/brace-style': ['error', 'stroustrup', { allowSingleLine: true }],\n 'vue/comma-dangle': ['error', 'always-multiline'],\n 'vue/comma-spacing': ['error', { after: true, before: false }],\n 'vue/comma-style': ['error', 'last'],\n 'vue/html-comment-content-spacing': [\n 'error',\n 'always',\n {\n exceptions: ['-'],\n },\n ],\n 'vue/key-spacing': ['error', { afterColon: true, beforeColon: false }],\n 'vue/keyword-spacing': ['error', { after: true, before: true }],\n 'vue/object-curly-newline': 'off',\n 'vue/object-curly-spacing': ['error', 'always'],\n 'vue/object-property-newline': [\n 'error',\n { allowMultiplePropertiesPerLine: true },\n ],\n 'vue/operator-linebreak': ['error', 'before'],\n 'vue/padding-line-between-blocks': ['error', 'always'],\n 'vue/quote-props': ['error', 'consistent-as-needed'],\n 'vue/space-in-parens': ['error', 'never'],\n 'vue/template-curly-spacing': 'error',\n\n ...overrides,\n },\n },\n ]\n}\n","import { GLOB_YAML } from '../globs'\nimport { interopDefault } from '../utils'\nimport type { ConfigFn, OptionsOverrides } from '../types'\n\nexport type YmlConfig = (options: OptionsOverrides) => ReturnType<ConfigFn>\n\nexport const yml: YmlConfig = async (options) => {\n const { overrides = {} } = options\n\n const [pluginYml, parserYml] = await Promise.all([\n interopDefault(import('eslint-plugin-yml')),\n interopDefault(import('yaml-eslint-parser')),\n ] as const)\n\n return [\n {\n name: 'eslint/yaml/setup',\n plugins: {\n yml: pluginYml,\n },\n },\n {\n name: 'eslint/yaml/rules',\n files: [GLOB_YAML],\n languageOptions: {\n parser: parserYml,\n },\n rules: {\n // recommended rules\n 'yml/no-empty-document': 'error',\n 'yml/no-empty-key': 'error',\n 'yml/no-empty-mapping-value': 'error',\n 'yml/no-empty-sequence-entry': 'error',\n 'yml/no-irregular-whitespace': 'error',\n 'yml/no-tab-indent': 'error',\n 'yml/vue-custom-block/no-parsing-error': 'error',\n\n // standard rules\n 'yml/block-mapping-colon-indicator-newline': 'error',\n 'yml/block-mapping-question-indicator-newline': 'error',\n 'yml/block-mapping': 'error',\n 'yml/block-sequence-hyphen-indicator-newline': 'error',\n 'yml/block-sequence': 'error',\n 'yml/flow-mapping-curly-newline': 'error',\n 'yml/flow-mapping-curly-spacing': 'error',\n 'yml/flow-sequence-bracket-newline': 'error',\n 'yml/flow-sequence-bracket-spacing': 'error',\n 'yml/indent': 'error',\n 'yml/key-spacing': 'error',\n 'yml/no-multiple-empty-lines': 'error',\n 'yml/no-trailing-zeros': 'error',\n 'yml/plain-scalar': 'error',\n 'yml/quotes': 'error',\n 'yml/spaced-comment': 'error',\n\n ...overrides,\n },\n },\n ]\n}\n","import { GLOB_JSX, GLOB_TSX } from '../globs'\nimport { combine, interopDefault } from '../utils'\nimport type { ConfigFn, ConfigItem, OptionsOverrides } from '../types'\n\nexport type ReactConfig = (\n options: {\n next?: boolean\n compiler?: boolean\n } & OptionsOverrides,\n) => ReturnType<ConfigFn>\n\nasync function next(): Promise<ConfigItem[]> {\n const pluginNext = await interopDefault(import('@next/eslint-plugin-next'))\n\n return [\n {\n name: 'eslint/next/setup',\n plugins: {\n '@next/next': pluginNext,\n },\n },\n {\n name: 'eslint/next/rules',\n files: [GLOB_TSX, GLOB_JSX],\n languageOptions: {\n parserOptions: {\n sourceType: 'module',\n ecmaFeatures: {\n jsx: true,\n },\n },\n },\n settings: {\n react: {\n version: 'detect',\n },\n },\n rules: {\n ...pluginNext.configs.recommended.rules,\n // ...pluginNext.configs['core-web-vitals'].rules,\n\n 'react-refresh/only-export-components': [\n 'warn',\n {\n allowExportNames: [\n // https://nextjs.org/docs/app/api-reference/file-conventions/route-segment-config\n 'dynamic',\n 'dynamicParams',\n 'revalidate',\n 'fetchCache',\n 'runtime',\n 'preferredRegion',\n 'maxDuration',\n // https://nextjs.org/docs/app/api-reference/functions/generate-static-params\n 'generateStaticParams',\n // https://nextjs.org/docs/app/api-reference/functions/generate-metadata\n 'metadata',\n 'generateMetadata',\n // https://nextjs.org/docs/app/api-reference/functions/generate-viewport\n 'viewport',\n 'generateViewport',\n // https://nextjs.org/docs/app/api-reference/functions/generate-image-metadata\n 'generateImageMetadata',\n // https://nextjs.org/docs/app/api-reference/functions/generate-sitemaps\n 'generateSitemaps',\n ],\n },\n ],\n },\n },\n ]\n}\n\nexport const react: ReactConfig = async (options): Promise<ConfigItem[]> => {\n const {\n next: enableNext = false,\n compiler: enableCompiler = false,\n overrides = {},\n } = options\n\n const [pluginsReact, pluginReactHooks, pluginReactRefresh] =\n await Promise.all([\n interopDefault(import('@eslint-react/eslint-plugin')),\n interopDefault(import('eslint-plugin-react-hooks')),\n interopDefault(import('eslint-plugin-react-refresh')),\n ] as const)\n\n const plugins = (pluginsReact.configs.all as any).plugins\n\n const {\n '@eslint-react': pluginReactX,\n '@eslint-react/dom': pluginReactDom,\n '@eslint-react/hooks-extra': pluginReactHooksExtra,\n '@eslint-react/naming-convention': pluginReactNamingConvention,\n '@eslint-react/web-api': pluginReactWebApi,\n } = plugins\n\n const _react: ConfigItem[] = [\n {\n name: 'eslint/react/setup',\n plugins: {\n 'react': pluginReactX,\n 'react-dom': pluginReactDom,\n 'react-hooks-extra': pluginReactHooksExtra,\n 'react-naming-convention': pluginReactNamingConvention,\n 'react-web-api': pluginReactWebApi,\n\n 'react-hooks': pluginReactHooks,\n 'react-refresh': pluginReactRefresh,\n ...(enableCompiler\n ? {\n 'react-compiler': await interopDefault(\n // @ts-expect-error missing types\n import('eslint-plugin-react-compiler'),\n ),\n }\n : {}),\n },\n },\n {\n name: 'eslint/react/rules',\n files: [GLOB_TSX, GLOB_JSX],\n languageOptions: {\n sourceType: 'module',\n parserOptions: {\n ecmaFeatures: {\n jsx: true,\n },\n },\n },\n settings: {\n react: {\n version: 'detect',\n },\n },\n rules: {\n // recommended rules from eslint-plugin-react-x https://eslint-react.xyz/docs/rules/overview#core-rules\n 'react/jsx-key-before-spread': 'warn',\n 'react/jsx-no-comment-textnodes': 'warn',\n 'react/jsx-no-duplicate-props': 'warn',\n 'react/jsx-uses-react': 'warn',\n 'react/jsx-uses-vars': 'warn',\n 'react/no-access-state-in-setstate': 'error',\n 'react/no-array-index-key': 'warn',\n 'react/no-children-count': 'warn',\n 'react/no-children-for-each': 'warn',\n 'react/no-children-map': 'warn',\n 'react/no-children-only': 'warn',\n 'react/no-children-to-array': 'warn',\n 'react/no-clone-element': 'warn',\n 'react/no-component-will-mount': 'error',\n 'react/no-component-will-receive-props': 'error',\n 'react/no-component-will-update': 'error',\n 'react/no-context-provider': 'warn',\n 'react/no-create-ref': 'error',\n 'react/no-default-props': 'error',\n 'react/no-direct-mutation-state': 'error',\n 'react/no-duplicate-key': 'error',\n 'react/no-forward-ref': 'warn',\n 'react/no-implicit-key': 'warn',\n 'react/no-missing-key': 'error',\n 'react/no-nested-component-definitions': 'error',\n 'react/no-nested-lazy-component-declarations': 'error',\n 'react/no-prop-types': 'error',\n 'react/no-redundant-should-component-update': 'error',\n 'react/no-set-state-in-component-did-mount': 'warn',\n 'react/no-set-state-in-component-did-update': 'warn',\n 'react/no-set-state-in-component-will-update': 'warn',\n 'react/no-string-refs': 'error',\n 'react/no-unnecessary-use-prefix': 'warn',\n 'react/no-unsafe-component-will-mount': 'warn',\n 'react/no-unsafe-component-will-receive-props': 'warn',\n 'react/no-unsafe-component-will-update': 'warn',\n 'react/no-use-context': 'warn',\n 'react/no-useless-forward-ref': 'warn',\n 'react/prefer-use-state-lazy-initialization': 'warn',\n 'react/prefer-namespace-import': 'error',\n\n // recommended rules from eslint-plugin-react-dom https://eslint-react.xyz/docs/rules/overview#dom-rules\n 'react-dom/no-dangerously-set-innerhtml': 'warn',\n 'react-dom/no-dangerously-set-innerhtml-with-children': 'error',\n 'react-dom/no-find-dom-node': 'error',\n 'react-dom/no-flush-sync': 'error',\n 'react-dom/no-hydrate': 'error',\n 'react-dom/no-namespace': 'error',\n 'react-dom/no-render': 'error',\n 'react-dom/no-render-return-value': 'error',\n 'react-dom/no-script-url': 'warn',\n 'react-dom/no-unsafe-iframe-sandbox': 'warn',\n 'react-dom/no-use-form-state': 'error',\n 'react-dom/no-void-elements-with-children': 'error',\n\n // recommended rules eslint-plugin-react-hooks https://github.com/facebook/react/blob/main/packages/eslint-plugin-react-hooks/README.md\n // Core hooks rules\n 'react-hooks/rules-of-hooks': 'error',\n 'react-hooks/exhaustive-deps': 'warn',\n\n // recommended rules from eslint-plugin-react-hooks-extra https://eslint-react.xyz/docs/rules/overview#hooks-extra-rules\n 'react-hooks-extra/no-direct-set-state-in-use-effect': 'warn',\n\n // recommended rules from eslint-plugin-react-web-api https://eslint-react.xyz/docs/rules/overview#web-api-rules\n 'react-web-api/no-leaked-event-listener': 'warn',\n 'react-web-api/no-leaked-interval': 'warn',\n 'react-web-api/no-leaked-resize-observer': 'warn',\n 'react-web-api/no-leaked-timeout': 'warn',\n\n // React Refresh\n 'react-refresh/only-export-components': 'warn',\n\n // React Compiler\n ...(enableCompiler\n ? {\n 'react-compiler/react-compiler': 'error',\n 'react-hooks/config': 'error',\n 'react-hooks/error-boundaries': 'error',\n 'react-hooks/component-hook-factories': 'error',\n 'react-hooks/gating': 'error',\n 'react-hooks/globals': 'error',\n 'react-hooks/immutability': 'error',\n 'react-hooks/preserve-manual-memoization': 'error',\n 'react-hooks/purity': 'error',\n 'react-hooks/refs': 'error',\n 'react-hooks/set-state-in-effect': 'error',\n 'react-hooks/set-state-in-render': 'error',\n 'react-hooks/static-components': 'error',\n 'react-hooks/unsupported-syntax': 'warn',\n 'react-hooks/use-memo': 'error',\n 'react-hooks/incompatible-library': 'warn',\n }\n : {}),\n\n 'jsx-quotes': ['error', 'prefer-double'],\n 'react/react-in-jsx-scope': 'off',\n 'react/jsx-indent': [1, 2],\n 'react/jsx-indent-props': [1, 2],\n 'react/jsx-closing-bracket-location': [\n 1,\n { selfClosing: 'tag-aligned', nonEmpty: 'tag-aligned' },\n ],\n\n ...overrides,\n },\n },\n ]\n\n return combine(_react, enableNext ? next() : [])\n}\n","import { interopDefault } from '../utils'\nimport type { ConfigFn, ConfigItem, OptionsOverrides } from '../types'\n\nexport type TailwindcssConfig = (\n options: {\n settings?: {\n entryPoint?: string\n tailwindConfig?: string\n tsconfig?: string\n attributes?: string[]\n callees?: string[]\n variables?: string[]\n }\n } & OptionsOverrides,\n) => ReturnType<ConfigFn>\n\nexport const tailwindcss: TailwindcssConfig = async (\n options,\n): Promise<ConfigItem[]> => {\n const { overrides = {} } = options\n const pluginBetterTailwindcss = await interopDefault(\n import('eslint-plugin-better-tailwindcss'),\n )\n\n return [\n {\n name: 'eslint/better-tailwindcss/rules',\n settings: {\n 'better-tailwindcss': {\n entryPoint: 'src/global.css',\n ...options.settings,\n },\n },\n plugins: {\n 'better-tailwindcss': pluginBetterTailwindcss,\n },\n rules: {\n 'better-tailwindcss/no-unknown-classes': 'warn',\n 'better-tailwindcss/no-conflicting-classes': 'warn',\n 'better-tailwindcss/no-unnecessary-whitespace': 'warn',\n 'better-tailwindcss/no-duplicate-classes': 'warn',\n 'better-tailwindcss/enforce-consistent-class-order': 'warn',\n\n ...overrides,\n },\n },\n ]\n}\n","import {\n comments,\n ignores,\n imports,\n javascript,\n jsdoc,\n jsonc,\n markdown,\n node,\n perfectionist,\n prettier,\n sortPackageJson,\n sortTsconfig,\n test,\n toml,\n typescript,\n unicorn,\n vue,\n yml,\n} from '~/configs'\nimport { react } from '~/configs/react'\nimport { tailwindcss } from '~/configs/tailwindcss'\nimport { combine, getConfigOptions } from '~/utils'\nimport type { Awaitable, ConfigItem, OptionsConfig } from '~/types'\n\n/**\n * Construct an array of ESLint flat config items.\n */\nexport function defineConfig(\n options: OptionsConfig = {},\n ...userConfigs: ConfigItem[]\n) {\n const {\n ignores: enableIgnores = true,\n vue: enableVue,\n react: enableReact,\n solid: enableSolid,\n typescript: enableTypeScript,\n tailwindcss: enableTailwindcss,\n componentExts = [],\n } = options\n\n const configs: Awaitable<ConfigItem | ConfigItem[]>[] = []\n\n // Base configs\n configs.push(\n ignores(getConfigOptions(enableIgnores)),\n javascript(options.javascript ?? {}),\n comments(),\n node(),\n jsdoc(),\n imports(),\n unicorn(),\n\n perfectionist(),\n )\n\n if (enableVue) componentExts.push('vue')\n\n if (enableTypeScript) {\n configs.push(\n typescript({\n ...(typeof enableTypeScript !== 'boolean' ? enableTypeScript : {}),\n enableSolid,\n componentExts,\n }),\n )\n }\n\n if (options.test ?? true) {\n configs.push(test(getConfigOptions(options.test)))\n }\n\n if (enableVue) {\n configs.push(\n vue({\n ...getConfigOptions(options.vue),\n typescript: !!enableTypeScript,\n }),\n )\n }\n\n if (enableReact) {\n configs.push(react(getConfigOptions(enableReact)))\n }\n\n if (options.jsonc ?? true) {\n configs.push(\n jsonc(getConfigOptions(options.jsonc)),\n sortPackageJson(),\n sortTsconfig(),\n )\n }\n\n if (options.yml ?? true) {\n configs.push(yml(getConfigOptions(options.yml)))\n }\n\n if (options.toml ?? true) {\n configs.push(toml(getConfigOptions(options.toml)))\n }\n\n if (options.markdown ?? true) {\n configs.push(\n markdown({\n ...getConfigOptions(options.markdown),\n componentExts,\n }),\n )\n }\n\n if (enableTailwindcss !== 'prettier' && enableTailwindcss) {\n configs.push(tailwindcss(getConfigOptions(enableTailwindcss)))\n }\n\n if (options.prettier ?? true) {\n configs.push(\n prettier({\n ...getConfigOptions(options.prettier),\n tailwindcss: enableTailwindcss === 'prettier',\n }),\n )\n }\n\n const merged = combine(...configs, ...userConfigs)\n\n return merged\n}\n","import { defineConfig } from './factory'\n\nexport * from './configs'\nexport { defineConfig } from './factory'\nexport * from './factory'\nexport * from './globs'\nexport * from './types'\nexport * from './utils'\n\nexport default defineConfig\n"],"mappings":"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AC,UAAU;GAClB,QAAQ;GACT;EACD;GACE,MAAM;GACN,OAAO,CAAC,UAAU;GAClB,QAAQ;GACT;EACD;GACE,MAAM;GACN,OAAO,CAAC,eAAe;GACvB,QAAQ;GACT;EACF,CAAC,KAAK,UAAU;EACf,MAAM,KAAK;EACX,OAAO,KAAK;EACZ,iBAAiB,EACf,QAAQ,aACT;EACD,OAAO,EACL,qBAAqB,CACnB,QACA;GACE,QAAQ,KAAK;GAEb,GAAG;GACH,GAAG;GACJ,CACF,EACF;EACF,EAAE;AAEH,QAAO;EACL;GACE,MAAM;GACN,SAAS,EACP,UAAU,gBACX;GACF;EACD;GACE,MAAM;GACN,SAAS,CAAC,UAAU;GACpB,OAAO;IAEL,GAAG,oBAAoB;IAIrB,oBAAoB;IACpB,yBAAyB;IAG3B,qBAAqB,CACnB,QACA;KACE,SAAS,cAAc,CAAC,8BAA8B,GAAG,EAAE;KAC3D,GAAG;KACH,GAAG;KACJ,CACF;IACF;GACF;EAED,GAAG;EACJ;;;;;;;;;;ACxHH,eAAsB,kBAAyC;AAC7D,QAAO,CACL;EACE,MAAM;EACN,OAAO,CAAC,kBAAkB;EAC1B,OAAO;GACL,2BAA2B,CACzB,SACA;IACE,OAAO,EAAE,MAAM,OAAO;IACtB,aAAa;IACd,CACF;GACD,mBAAmB;IACjB;IACA;KACE,OAAO;MACL;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACD;KACD,aAAa;KACd;IACD;KACE,OAAO,EAAE,MAAM,OAAO;KACtB,aACE;KACH;IACD;KACE,OAAO,EAAE,MAAM,OAAO;KACtB,aAAa;KACd;IACD;KACE,OAAO;MAAC;MAAS;MAAU;MAAW;MAAU;KAChD,aAAa;KACd;IACF;GACF;EACF,CACF;;;;;;;AAQH,eAAsB,eAAsC;AAC1D,QAAO,CACL;EACE,MAAM;EACN,OAAO,CAAC,oBAAoB,qBAAqB;EACjD,OAAO,EACL,mBAAmB;GACjB;GACA;IACE,OAAO;KACL;KACA;KACA;KACA;KACA;KACA;KACD;IACD,aAAa;IACd;GACD;IACE,OAAO;KAEL;KACA;KACA;KACA;KACA;KACA;KAEA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KAEA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KAEA;KACA;KACA;KAEA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KAEA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KAEA;KACA;KACA;KACA;KACA;KACA;KAEA;KACA;KACD;IACD,aAAa;IACd;GACF,EACF;EACF,CACF;;;;;ACnNH,MAAa,OAAmB,OAAO,YAAY;CACjD,MAAM,EAAE,YAAY,EAAE,KAAK;CAE3B,MAAM,CAAC,cAAc,qBAAqB,MAAM,QAAQ,IAAI,CAC1D,eAAe,OAAO,yBAAyB,EAE/C,eAAe,OAAO,+BAA+B,CACtD,CAAU;AAEX,QAAO,CACL;EACE,MAAM;EACN,SAAS,EACP,MAAM;GACJ,GAAG;GACH,OAAO;IACL,GAAG,aAAa;IAEhB,GAAG,kBAAkB;IACtB;GACF,EACF;EACF,EACD;EACE,MAAM;EACN,OAAO;EACP,OAAO;GACL,8BAA8B;GAE9B,2BAA2B,CACzB,SACA;IAAE,IAAI;IAAM,gBAAgB;IAAM,CACnC;GACD,2BAA2B;GAC3B,4BAA4B;GAC5B,sBAAsB;GACtB,8BAA8B;GAC9B,+BAA+B;GAE/B,oDAAoD;GAEpD,GAAG;GACJ;EACF,CACF;;;;;AC5CH,MAAa,OAAmB,OAAO,YAAY;CACjD,MAAM,EAAE,YAAY,EAAE,KAAK;CAE3B,MAAM,CAAC,YAAY,cAAc,MAAM,QA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"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../src/utils.ts","../src/configs/comments.ts","../src/globs.ts","../src/configs/ignores.ts","../src/configs/imports.ts","../src/configs/javascript.ts","../src/configs/jsdoc.ts","../src/configs/jsonc.ts","../src/configs/markdown.ts","../src/configs/node.ts","../src/configs/perfectionist.ts","../src/configs/prettier.ts","../src/configs/sort.ts","../src/configs/test.ts","../src/configs/toml.ts","../src/configs/typescript.ts","../src/configs/unicorn.ts","../src/configs/vue.ts","../src/configs/yml.ts","../src/configs/react.ts","../src/configs/tailwindcss.ts","../src/factory.ts","../src/index.ts"],"sourcesContent":["import type { Awaitable, ConfigItem } from './types'\n\nexport const parserPlain = {\n meta: {\n name: 'parser-plain',\n },\n parseForESLint: (code: string) => ({\n ast: {\n body: [],\n comments: [],\n loc: { end: code.length, start: 0 },\n range: [0, code.length],\n tokens: [],\n type: 'Program',\n },\n scopeManager: null,\n services: { isPlain: true },\n visitorKeys: {\n Program: [],\n },\n }),\n}\n\n/**\n * Combine array and non-array configs into a single array.\n */\nexport async function combine(\n ...configs: Awaitable<ConfigItem | ConfigItem[]>[]\n): Promise<ConfigItem[]> {\n const resolved = await Promise.all(configs)\n return resolved.flat()\n}\n\nexport async function interopDefault<T>(\n m: Awaitable<T>,\n): Promise<T extends { default: infer U } ? U : T> {\n const resolved = await m\n return (resolved as any).default || resolved\n}\n\nexport function getConfigOptions<T>(options: T) {\n return options ? (typeof options !== 'boolean' ? options : {}) : {}\n}\n","import { interopDefault } from '../utils'\nimport type { ConfigItem } from '../types'\n\nexport async function comments(): Promise<ConfigItem[]> {\n const pluginComments = await interopDefault(\n import('@eslint-community/eslint-plugin-eslint-comments'),\n )\n\n return [\n {\n name: 'eslint/eslint-comments/rules',\n plugins: {\n 'eslint-comments': pluginComments,\n },\n rules: {\n 'eslint-comments/no-aggregating-enable': 'error',\n 'eslint-comments/no-duplicate-disable': 'error',\n 'eslint-comments/no-unlimited-disable': 'error',\n 'eslint-comments/no-unused-enable': 'error',\n },\n },\n ]\n}\n","export const GLOB_SRC_EXT = '?([cm])[jt]s?(x)'\nexport const GLOB_SRC = '**/*.?([cm])[jt]s?(x)'\n\nexport const GLOB_JS = '**/*.?([cm])js'\nexport const GLOB_JSX = '**/*.?([cm])jsx'\n\nexport const GLOB_TS = '**/*.?([cm])ts'\nexport const GLOB_TSX = '**/*.?([cm])tsx'\n\nexport const GLOB_STYLE = '**/*.{c,le,sc}ss'\nexport const GLOB_CSS = '**/*.css'\nexport const GLOB_POSTCSS = '**/*.{p,post}css'\nexport const GLOB_LESS = '**/*.less'\nexport const GLOB_SCSS = '**/*.scss'\n\nexport const GLOB_JSON = '**/*.json'\nexport const GLOB_JSON5 = '**/*.json5'\nexport const GLOB_JSONC = '**/*.jsonc'\n\nexport const GLOB_MARKDOWN = '**/*.md'\nexport const GLOB_MDX = '**/*.mdx'\nexport const GLOB_MARKDOWN_CODE = `${GLOB_MARKDOWN}/${GLOB_SRC}`\nexport const GLOB_MARKDOWN_IN_MARKDOWN = '**/*.md/*.md'\nexport const GLOB_ASTRO_TS = '**/*.astro/*.ts'\n\nexport const GLOB_VUE = '**/*.vue'\n\nexport const GLOB_YAML = '**/*.y?(a)ml'\nexport const GLOB_TOML = '**/*.toml'\nexport const GLOB_HTML = '**/*.htm?(l)'\n\nexport const GLOB_TESTS = [\n `**/__tests__/**/*.${GLOB_SRC_EXT}`,\n `**/*.spec.${GLOB_SRC_EXT}`,\n `**/*.test.${GLOB_SRC_EXT}`,\n `**/*.bench.${GLOB_SRC_EXT}`,\n `**/*.benchmark.${GLOB_SRC_EXT}`,\n]\n\nexport const GLOB_ALL_SRC = [\n GLOB_SRC,\n GLOB_STYLE,\n GLOB_JSON,\n GLOB_JSON5,\n GLOB_MARKDOWN,\n GLOB_VUE,\n GLOB_YAML,\n GLOB_HTML,\n]\n\nexport const GLOB_EXCLUDE = [\n '**/node_modules',\n '**/dist',\n '**/package-lock.json',\n '**/yarn.lock',\n '**/pnpm-lock.yaml',\n '**/bun.lockb',\n\n '**/public',\n '**/output',\n '**/coverage',\n '**/temp',\n '**/.vitepress/cache',\n '**/.nuxt',\n '**/.next',\n '**/.vercel',\n '**/.changeset',\n '**/.idea',\n '**/.cache',\n '**/.output',\n '**/.vite-inspect',\n\n '**/CHANGELOG*.md',\n '**/*.min.*',\n '**/LICENSE*',\n '**/__snapshots__',\n '**/auto-import?(s).d.ts',\n '**/components.d.ts',\n]\n","import { getConfigOptions, interopDefault } from '~/utils'\nimport { GLOB_EXCLUDE } from '../globs'\nimport type { FlatGitignoreOptions } from 'eslint-config-flat-gitignore'\nimport type { ConfigFn } from '../types'\n\nexport type IgnoresConfig = (options: {\n enableGitignore?: boolean | Omit<FlatGitignoreOptions, 'name'>\n files?: ((files: string[]) => string[]) | string[]\n}) => ReturnType<ConfigFn>\n\nexport const ignores: IgnoresConfig = async (options) => {\n const { enableGitignore = true, files = [] } = options\n\n const gitIgnores: string[] = []\n if (enableGitignore) {\n const gitignore = await interopDefault(\n import('eslint-config-flat-gitignore'),\n )\n\n gitIgnores.push(...gitignore(getConfigOptions(enableGitignore)).ignores)\n }\n\n let ignores = [...GLOB_EXCLUDE, ...gitIgnores]\n\n if (typeof files === 'function') {\n ignores = files(ignores)\n } else {\n ignores = [...ignores, ...files]\n }\n\n return [\n {\n name: 'eslint/ignores',\n ignores: [...GLOB_EXCLUDE, ...ignores],\n },\n ]\n}\n","import { interopDefault } from '../utils'\nimport type { ConfigItem } from '../types'\n\nexport async function imports(): Promise<ConfigItem[]> {\n const pluginImport = await interopDefault(import('eslint-plugin-import-x'))\n\n return [\n {\n name: 'eslint/imports/rules',\n plugins: {\n import: pluginImport,\n },\n rules: {\n 'import/first': 'error',\n 'import/no-duplicates': 'error',\n 'import/no-mutable-exports': 'error',\n 'import/no-named-default': 'error',\n 'import/no-self-import': 'error',\n 'import/no-webpack-loader-syntax': 'error',\n\n 'import/newline-after-import': ['error', { count: 1 }],\n 'import/consistent-type-specifier-style': ['error', 'prefer-top-level'],\n },\n },\n ]\n}\n","import globals from 'globals'\nimport { GLOB_SRC, GLOB_SRC_EXT } from '../globs'\nimport { interopDefault } from '../utils'\nimport type { ConfigFn } from '../types'\n\nexport type JavascriptConfig = ConfigFn\n\nexport const javascript: JavascriptConfig = async (options) => {\n const { overrides = {} } = options\n\n const pluginUnusedImports = await interopDefault(\n import('eslint-plugin-unused-imports'),\n )\n\n return [\n {\n name: 'eslint/javascript/rules',\n languageOptions: {\n ecmaVersion: 2022,\n globals: {\n ...globals.browser,\n ...globals.es2021,\n ...globals.node,\n document: 'readonly',\n navigator: 'readonly',\n window: 'readonly',\n },\n parserOptions: {\n ecmaFeatures: {\n jsx: true,\n },\n ecmaVersion: 2022,\n sourceType: 'module',\n },\n sourceType: 'module',\n },\n linterOptions: {\n reportUnusedDisableDirectives: true,\n },\n plugins: {\n 'unused-imports': pluginUnusedImports,\n },\n rules: {\n 'accessor-pairs': [\n 'error',\n { enforceForClassMembers: true, setWithoutGet: true },\n ],\n\n 'array-callback-return': 'error',\n 'block-scoped-var': 'error',\n 'constructor-super': 'error',\n 'default-case-last': 'error',\n 'dot-notation': ['error', { allowKeywords: true }],\n 'eqeqeq': ['error', 'smart'],\n 'new-cap': [\n 'error',\n { capIsNew: false, newIsCap: true, properties: true },\n ],\n 'no-alert': 'error',\n 'no-array-constructor': 'error',\n 'no-async-promise-executor': 'error',\n 'no-caller': 'error',\n 'no-case-declarations': 'error',\n 'no-class-assign': 'error',\n 'no-compare-neg-zero': 'error',\n 'no-cond-assign': ['error', 'always'],\n 'no-console': ['error', { allow: ['warn', 'error'] }],\n 'no-const-assign': 'error',\n 'no-control-regex': 'error',\n 'no-debugger': 'error',\n 'no-delete-var': 'error',\n 'no-dupe-args': 'error',\n 'no-dupe-class-members': 'error',\n 'no-dupe-keys': 'error',\n 'no-duplicate-case': 'error',\n 'no-empty': ['error', { allowEmptyCatch: true }],\n 'no-empty-character-class': 'error',\n 'no-empty-pattern': 'error',\n 'no-eval': 'error',\n 'no-ex-assign': 'error',\n 'no-extend-native': 'error',\n 'no-extra-bind': 'error',\n 'no-extra-boolean-cast': 'error',\n 'no-fallthrough': 'error',\n 'no-func-assign': 'error',\n 'no-global-assign': 'error',\n 'no-implied-eval': 'error',\n 'no-import-assign': 'error',\n 'no-invalid-regexp': 'error',\n 'no-invalid-this': 'error',\n 'no-irregular-whitespace': 'error',\n 'no-iterator': 'error',\n 'no-labels': ['error', { allowLoop: false, allowSwitch: false }],\n 'no-lone-blocks': 'error',\n 'no-loss-of-precision': 'error',\n 'no-misleading-character-class': 'error',\n 'no-multi-str': 'error',\n 'no-new': 'error',\n 'no-new-func': 'error',\n 'no-new-native-nonconstructor': 'error',\n 'no-new-wrappers': 'error',\n 'no-obj-calls': 'error',\n 'no-octal': 'error',\n 'no-octal-escape': 'error',\n 'no-proto': 'error',\n 'no-prototype-builtins': 'error',\n 'no-redeclare': ['error', { builtinGlobals: false }],\n 'no-regex-spaces': 'error',\n 'no-restricted-globals': [\n 'error',\n { message: 'Use `globalThis` instead.', name: 'global' },\n { message: 'Use `globalThis` instead.', name: 'self' },\n ],\n 'no-restricted-properties': [\n 'error',\n {\n message:\n 'Use `Object.getPrototypeOf` or `Object.setPrototypeOf` instead.',\n property: '__proto__',\n },\n {\n message: 'Use `Object.defineProperty` instead.',\n property: '__defineGetter__',\n },\n {\n message: 'Use `Object.defineProperty` instead.',\n property: '__defineSetter__',\n },\n {\n message: 'Use `Object.getOwnPropertyDescriptor` instead.',\n property: '__lookupGetter__',\n },\n {\n message: 'Use `Object.getOwnPropertyDescriptor` instead.',\n property: '__lookupSetter__',\n },\n ],\n 'no-restricted-syntax': [\n 'error',\n 'TSEnumDeclaration[const=true]',\n 'TSExportAssignment',\n ],\n 'no-self-assign': ['error', { props: true }],\n 'no-self-compare': 'error',\n 'no-sequences': 'error',\n 'no-shadow-restricted-names': 'error',\n 'no-sparse-arrays': 'error',\n 'no-template-curly-in-string': 'error',\n 'no-this-before-super': 'error',\n 'no-throw-literal': 'error',\n 'no-undef': 'error',\n 'no-undef-init': 'error',\n 'no-unexpected-multiline': 'error',\n 'no-unmodified-loop-condition': 'error',\n 'no-unneeded-ternary': ['error', { defaultAssignment: false }],\n 'no-unreachable': 'error',\n 'no-unreachable-loop': 'error',\n 'no-unsafe-finally': 'error',\n 'no-unsafe-negation': 'error',\n 'no-unused-expressions': [\n 'error',\n {\n allowShortCircuit: true,\n allowTaggedTemplates: true,\n allowTernary: true,\n },\n ],\n 'no-unused-vars': [\n 'error',\n {\n args: 'none',\n caughtErrors: 'none',\n ignoreRestSiblings: true,\n vars: 'all',\n },\n ],\n 'no-use-before-define': [\n 'error',\n { classes: false, functions: false, variables: true },\n ],\n 'no-useless-backreference': 'error',\n 'no-useless-call': 'error',\n 'no-useless-catch': 'error',\n 'no-useless-computed-key': 'error',\n 'no-useless-constructor': 'error',\n 'no-useless-rename': 'error',\n 'no-useless-return': 'error',\n 'no-var': 'error',\n 'no-with': 'error',\n 'object-shorthand': [\n 'error',\n 'always',\n {\n avoidQuotes: true,\n ignoreConstructors: false,\n },\n ],\n 'one-var': ['error', { initialized: 'never' }],\n 'prefer-arrow-callback': [\n 'error',\n {\n allowNamedFunctions: false,\n allowUnboundThis: true,\n },\n ],\n 'prefer-const': [\n 'error',\n {\n destructuring: 'all',\n ignoreReadBeforeAssign: true,\n },\n ],\n 'prefer-exponentiation-operator': 'error',\n 'prefer-promise-reject-errors': 'error',\n 'prefer-regex-literals': ['error', { disallowRedundantWrapping: true }],\n 'prefer-rest-params': 'error',\n 'prefer-spread': 'error',\n 'prefer-template': 'error',\n 'symbol-description': 'error',\n 'unicode-bom': ['error', 'never'],\n 'unused-imports/no-unused-imports': 'warn',\n\n 'unused-imports/no-unused-vars': [\n 'error',\n {\n args: 'after-used',\n argsIgnorePattern: '^_',\n vars: 'all',\n varsIgnorePattern: '^_',\n },\n ],\n 'use-isnan': [\n 'error',\n { enforceForIndexOf: true, enforceForSwitchCase: true },\n ],\n 'valid-typeof': ['error', { requireStringLiterals: true }],\n 'vars-on-top': 'error',\n 'yoda': ['error', 'never'],\n\n ...overrides,\n },\n },\n {\n name: 'eslint/scripts-overrides/disables/cli',\n files: [`scripts/${GLOB_SRC}`, `cli.${GLOB_SRC_EXT}`],\n rules: {\n 'no-console': 'off',\n },\n },\n ]\n}\n","import { interopDefault } from '../utils'\nimport type { ConfigItem } from '../types'\n\nexport async function jsdoc(): Promise<ConfigItem[]> {\n return [\n {\n name: 'eslint/jsdoc/rules',\n plugins: {\n jsdoc: await interopDefault(import('eslint-plugin-jsdoc')),\n },\n rules: {\n 'jsdoc/check-access': 'warn',\n 'jsdoc/check-param-names': 'warn',\n 'jsdoc/check-property-names': 'warn',\n 'jsdoc/check-types': 'warn',\n 'jsdoc/empty-tags': 'warn',\n 'jsdoc/implements-on-classes': 'warn',\n 'jsdoc/no-defaults': 'warn',\n 'jsdoc/no-multi-asterisks': 'warn',\n 'jsdoc/require-param-name': 'warn',\n 'jsdoc/require-property': 'warn',\n 'jsdoc/require-property-description': 'warn',\n 'jsdoc/require-property-name': 'warn',\n 'jsdoc/require-returns-check': 'warn',\n 'jsdoc/require-returns-description': 'warn',\n 'jsdoc/require-yields-check': 'warn',\n\n 'jsdoc/check-alignment': 'warn',\n 'jsdoc/multiline-blocks': 'warn',\n },\n },\n ]\n}\n","import { GLOB_JSON, GLOB_JSON5, GLOB_JSONC } from '../globs'\nimport { interopDefault } from '../utils'\nimport type { ConfigFn } from '../types'\n\nexport type JsoncConfig = ConfigFn\n\nexport const jsonc: JsoncConfig = async (options) => {\n const { overrides = {} } = options\n\n const pluginJsonc = await interopDefault(import('eslint-plugin-jsonc'))\n\n return [\n {\n name: 'eslint/jsonc/setup',\n plugins: {\n jsonc: pluginJsonc,\n },\n },\n {\n name: 'eslint/jsonc/rules',\n files: [GLOB_JSON, GLOB_JSON5, GLOB_JSONC],\n language: 'jsonc/x',\n rules: {\n 'jsonc/no-bigint-literals': 'error',\n 'jsonc/no-binary-expression': 'error',\n 'jsonc/no-binary-numeric-literals': 'error',\n 'jsonc/no-dupe-keys': 'error',\n 'jsonc/no-escape-sequence-in-identifier': 'error',\n 'jsonc/no-floating-decimal': 'error',\n 'jsonc/no-hexadecimal-numeric-literals': 'error',\n 'jsonc/no-infinity': 'error',\n 'jsonc/no-multi-str': 'error',\n 'jsonc/no-nan': 'error',\n 'jsonc/no-number-props': 'error',\n 'jsonc/no-numeric-separators': 'error',\n 'jsonc/no-octal': 'error',\n 'jsonc/no-octal-escape': 'error',\n 'jsonc/no-octal-numeric-literals': 'error',\n 'jsonc/no-parenthesized': 'error',\n 'jsonc/no-plus-sign': 'error',\n 'jsonc/no-regexp-literals': 'error',\n 'jsonc/no-sparse-arrays': 'error',\n 'jsonc/no-template-literals': 'error',\n 'jsonc/no-undefined-value': 'error',\n 'jsonc/no-unicode-codepoint-escapes': 'error',\n 'jsonc/no-useless-escape': 'error',\n 'jsonc/space-unary-ops': 'error',\n 'jsonc/valid-json-number': 'error',\n 'jsonc/vue-custom-block/no-parsing-error': 'error',\n\n 'jsonc/array-bracket-spacing': ['error', 'never'],\n 'jsonc/comma-style': ['error', 'last'],\n 'jsonc/key-spacing': [\n 'error',\n { afterColon: true, beforeColon: false },\n ],\n 'jsonc/object-curly-newline': [\n 'error',\n { consistent: true, multiline: true },\n ],\n 'jsonc/object-curly-spacing': ['error', 'always'],\n 'jsonc/object-property-newline': [\n 'error',\n { allowMultiplePropertiesPerLine: true },\n ],\n 'jsonc/quote-props': 'error',\n 'jsonc/quotes': 'error',\n\n ...overrides,\n },\n },\n ]\n}\n","import { mergeProcessors, processorPassThrough } from 'eslint-merge-processors'\nimport {\n GLOB_MARKDOWN,\n GLOB_MARKDOWN_CODE,\n GLOB_MARKDOWN_IN_MARKDOWN,\n} from '../globs'\nimport { interopDefault } from '../utils'\nimport type {\n ConfigItem,\n OptionsComponentExts,\n OptionsFiles,\n OptionsMarkdown,\n} from '../types'\n\nexport type MarkdownConfig = (\n options: OptionsFiles & OptionsComponentExts & OptionsMarkdown,\n) => Promise<ConfigItem[]>\n\nexport const markdown: MarkdownConfig = async (\n options: OptionsFiles & OptionsComponentExts & OptionsMarkdown = {},\n) => {\n const {\n componentExts = [],\n files = [GLOB_MARKDOWN],\n gfm = true,\n overrides = {},\n overridesMarkdown = {},\n } = options\n\n const pluginMarkdown = await interopDefault(import('@eslint/markdown'))\n\n return [\n {\n name: 'eslint/markdown/setup',\n plugins: {\n markdown: pluginMarkdown,\n },\n },\n {\n files,\n ignores: [GLOB_MARKDOWN_IN_MARKDOWN],\n name: 'eslint/markdown/processor',\n processor: mergeProcessors([\n pluginMarkdown.processors!.markdown,\n processorPassThrough,\n ]),\n },\n {\n files,\n language: gfm ? 'markdown/gfm' : 'markdown/commonmark',\n name: 'eslint/markdown/parser',\n },\n {\n files,\n name: 'eslint/markdown/rules',\n rules: {\n ...pluginMarkdown.configs.recommended.at(0)?.rules,\n 'markdown/no-missing-label-refs': 'off',\n ...overridesMarkdown,\n },\n },\n {\n files,\n name: 'eslint/markdown/disables/markdown',\n rules: {\n 'jsdoc/check-access': 'off',\n 'jsdoc/check-alignment': 'off',\n 'jsdoc/check-param-names': 'off',\n 'jsdoc/check-property-names': 'off',\n 'jsdoc/check-types': 'off',\n 'jsdoc/empty-tags': 'off',\n 'jsdoc/implements-on-classes': 'off',\n 'jsdoc/multiline-blocks': 'off',\n 'jsdoc/no-defaults': 'off',\n 'jsdoc/no-multi-asterisks': 'off',\n 'jsdoc/require-param-name': 'off',\n 'jsdoc/require-property': 'off',\n 'jsdoc/require-property-description': 'off',\n 'jsdoc/require-property-name': 'off',\n 'jsdoc/require-returns-check': 'off',\n 'jsdoc/require-returns-description': 'off',\n 'jsdoc/require-yields-check': 'off',\n 'no-irregular-whitespace': 'off',\n 'perfectionist/sort-exports': 'off',\n 'perfectionist/sort-imports': 'off',\n },\n },\n {\n files: [\n GLOB_MARKDOWN_CODE,\n ...componentExts.map((ext) => `${GLOB_MARKDOWN}/**/*.${ext}`),\n ],\n languageOptions: {\n parserOptions: {\n ecmaFeatures: {\n impliedStrict: true,\n },\n },\n },\n name: 'eslint/markdown/disables/code',\n rules: {\n 'no-alert': 'off',\n 'no-console': 'off',\n 'no-labels': 'off',\n 'no-lone-blocks': 'off',\n 'no-restricted-syntax': 'off',\n 'no-undef': 'off',\n 'no-unused-expressions': 'off',\n 'no-unused-labels': 'off',\n 'no-unused-vars': 'off',\n\n 'node/prefer-global/process': 'off',\n\n '@typescript-eslint/consistent-type-imports': 'off',\n '@typescript-eslint/no-namespace': 'off',\n '@typescript-eslint/no-redeclare': 'off',\n '@typescript-eslint/no-require-imports': 'off',\n '@typescript-eslint/no-unused-vars': 'off',\n '@typescript-eslint/no-use-before-define': 'off',\n '@typescript-eslint/no-var-requires': 'off',\n\n 'unicode-bom': 'off',\n 'unused-imports/no-unused-imports': 'off',\n 'unused-imports/no-unused-vars': 'off',\n\n '@typescript-eslint/await-thenable': 'off',\n '@typescript-eslint/dot-notation': 'off',\n '@typescript-eslint/no-floating-promises': 'off',\n '@typescript-eslint/no-for-in-array': 'off',\n '@typescript-eslint/no-implied-eval': 'off',\n '@typescript-eslint/no-misused-promises': 'off',\n '@typescript-eslint/no-throw-literal': 'off',\n '@typescript-eslint/no-unnecessary-type-assertion': 'off',\n '@typescript-eslint/no-unsafe-argument': 'off',\n '@typescript-eslint/no-unsafe-assignment': 'off',\n '@typescript-eslint/no-unsafe-call': 'off',\n '@typescript-eslint/no-unsafe-member-access': 'off',\n '@typescript-eslint/no-unsafe-return': 'off',\n '@typescript-eslint/restrict-plus-operands': 'off',\n '@typescript-eslint/restrict-template-expressions': 'off',\n '@typescript-eslint/unbound-method': 'off',\n\n ...overrides,\n },\n },\n ]\n}\n","import { interopDefault } from '../utils'\nimport type { ConfigItem } from '../types'\n\nexport async function node(): Promise<ConfigItem[]> {\n const pluginNode = await interopDefault(import('eslint-plugin-n'))\n\n return [\n {\n name: 'eslint/node/rules',\n plugins: {\n n: pluginNode,\n },\n rules: {\n 'n/handle-callback-err': ['error', '^(err|error)$'],\n 'n/no-deprecated-api': 'error',\n 'n/no-exports-assign': 'error',\n 'n/no-new-require': 'error',\n 'n/no-path-concat': 'error',\n 'n/prefer-global/buffer': ['error', 'never'],\n 'n/prefer-global/process': ['error', 'never'],\n 'n/process-exit-as-throw': 'error',\n },\n },\n ]\n}\n","import { interopDefault } from '../utils'\nimport type { ConfigItem } from '../types'\n\n/**\n * Perfectionist plugin for props and items sorting.\n *\n * @see https://github.com/azat-io/eslint-plugin-perfectionist\n */\nexport async function perfectionist(): Promise<ConfigItem[]> {\n const pluginPerfectionist = await interopDefault(\n import('eslint-plugin-perfectionist'),\n )\n\n return [\n {\n name: 'eslint/perfectionist/setup',\n plugins: {\n perfectionist: pluginPerfectionist,\n },\n rules: {\n 'perfectionist/sort-exports': [\n 'error',\n { order: 'asc', type: 'natural' },\n ],\n 'perfectionist/sort-imports': [\n 'error',\n {\n groups: [\n 'value-builtin',\n 'value-external',\n 'value-internal',\n ['value-parent', 'value-sibling', 'value-index'],\n 'side-effect',\n 'ts-equals-import',\n 'type-import',\n ['type-parent', 'type-sibling', 'type-index', 'type-internal'],\n 'unknown',\n ],\n newlinesBetween: 'ignore',\n newlinesInside: 'ignore',\n order: 'asc',\n type: 'natural',\n },\n ],\n 'perfectionist/sort-named-exports': [\n 'error',\n { order: 'asc', type: 'natural' },\n ],\n 'perfectionist/sort-named-imports': [\n 'error',\n { order: 'asc', type: 'natural' },\n ],\n },\n },\n ]\n}\n","import {\n GLOB_CSS,\n GLOB_LESS,\n GLOB_MARKDOWN,\n GLOB_MDX,\n GLOB_POSTCSS,\n GLOB_SCSS,\n GLOB_TOML,\n GLOB_YAML,\n} from '../globs'\nimport { interopDefault, parserPlain } from '../utils'\nimport type { RequiredOptions } from 'prettier'\nimport type { ConfigItem } from '../types'\n\nexport type PrettierRequiredOptions = Partial<RequiredOptions>\n\nexport type PrettierConfig = ({\n options,\n}: PrettierRequiredOptions & {\n tailwindcss?: boolean\n}) => Promise<ConfigItem[]>\n\nexport const prettier: PrettierConfig = async ({ tailwindcss, ...options }) => {\n const [pluginPrettier, recommendedPrettier] = await Promise.all([\n interopDefault(import('eslint-plugin-prettier')),\n interopDefault(import('eslint-plugin-prettier/recommended')),\n ])\n\n const defaultPrettierOptions: PrettierRequiredOptions = {\n quoteProps: 'consistent',\n semi: false,\n singleQuote: true,\n jsxSingleQuote: true,\n }\n\n const plainFileRules: ConfigItem[] = [\n {\n name: 'eslint/prettier/markdown',\n files: [GLOB_MARKDOWN],\n parser: 'markdown',\n },\n {\n name: 'eslint/prettier/mdx',\n files: [GLOB_MDX],\n parser: 'mdx',\n },\n {\n name: 'eslint/prettier/html',\n files: ['**/*.html'],\n parser: 'html',\n },\n {\n name: 'eslint/prettier/css',\n files: [GLOB_CSS, GLOB_POSTCSS],\n parser: 'css',\n },\n {\n name: 'eslint/prettier/scss',\n files: [GLOB_SCSS],\n parser: 'scss',\n },\n {\n name: 'eslint/prettier/less',\n files: [GLOB_LESS],\n parser: 'less',\n },\n {\n name: 'eslint/prettier/yaml',\n files: [GLOB_YAML],\n parser: 'yaml',\n },\n {\n name: 'eslint/prettier/graphql',\n files: ['**/*.graphql'],\n parser: 'graphql',\n },\n ].map((rule) => ({\n name: rule.name,\n files: rule.files,\n languageOptions: {\n parser: parserPlain,\n },\n rules: {\n 'prettier/prettier': [\n 'warn',\n {\n parser: rule.parser,\n\n ...defaultPrettierOptions,\n ...options,\n },\n ],\n },\n }))\n\n return [\n {\n name: 'eslint/prettier/setup',\n plugins: {\n prettier: pluginPrettier,\n },\n },\n {\n name: 'eslint/prettier/rules',\n ignores: [GLOB_TOML],\n rules: {\n // disable rules with prettier conflicts\n ...recommendedPrettier.rules,\n\n // eslint-plugin-prettier recommended rules\n ...{\n 'arrow-body-style': 'off',\n 'prefer-arrow-callback': 'off',\n },\n\n 'prettier/prettier': [\n 'warn',\n {\n plugins: tailwindcss ? ['prettier-plugin-tailwindcss'] : [],\n ...defaultPrettierOptions,\n ...options,\n },\n ],\n },\n },\n\n ...plainFileRules,\n ]\n}\n","import type { ConfigItem } from '../types'\n\n/**\n * Sort package.json\n *\n * Requires `jsonc` config\n */\nexport async function sortPackageJson(): Promise<ConfigItem[]> {\n return [\n {\n name: 'eslint/sort/package-json',\n files: ['**/package.json'],\n rules: {\n 'jsonc/sort-array-values': [\n 'error',\n {\n order: { type: 'asc' },\n pathPattern: '^files$',\n },\n ],\n 'jsonc/sort-keys': [\n 'error',\n {\n order: [\n 'publisher',\n 'name',\n 'displayName',\n 'type',\n 'version',\n 'private',\n 'packageManager',\n 'description',\n 'author',\n 'license',\n 'funding',\n 'homepage',\n 'repository',\n 'bugs',\n 'keywords',\n 'categories',\n 'sideEffects',\n 'exports',\n 'main',\n 'module',\n 'unpkg',\n 'jsdelivr',\n 'types',\n 'typesVersions',\n 'bin',\n 'icon',\n 'files',\n 'engines',\n 'activationEvents',\n 'contributes',\n 'scripts',\n 'peerDependencies',\n 'peerDependenciesMeta',\n 'dependencies',\n 'optionalDependencies',\n 'devDependencies',\n 'pnpm',\n 'overrides',\n 'resolutions',\n 'husky',\n 'simple-git-hooks',\n 'lint-staged',\n 'eslintConfig',\n ],\n pathPattern: '^$',\n },\n {\n order: { type: 'asc' },\n pathPattern:\n '^(?:dev|peer|optional|bundled)?[Dd]ependencies(Meta)?$',\n },\n {\n order: { type: 'asc' },\n pathPattern: '^(?:resolutions|overrides|pnpm.overrides)$',\n },\n {\n order: ['types', 'import', 'require', 'default'],\n pathPattern: '^exports.*$',\n },\n ],\n },\n },\n ]\n}\n/**\n * Sort tsconfig.json\n *\n * Requires `jsonc` config\n */\n\nexport async function sortTsconfig(): Promise<ConfigItem[]> {\n return [\n {\n name: 'eslint/sort/tsconfig-json',\n files: ['**/tsconfig.json', '**/tsconfig.*.json'],\n rules: {\n 'jsonc/sort-keys': [\n 'error',\n {\n order: [\n 'extends',\n 'compilerOptions',\n 'references',\n 'files',\n 'include',\n 'exclude',\n ],\n pathPattern: '^$',\n },\n {\n order: [\n /* Projects */\n 'incremental',\n 'composite',\n 'tsBuildInfoFile',\n 'disableSourceOfProjectReferenceRedirect',\n 'disableSolutionSearching',\n 'disableReferencedProjectLoad',\n /* Language and Environment */\n 'target',\n 'jsx',\n 'jsxFactory',\n 'jsxFragmentFactory',\n 'jsxImportSource',\n 'lib',\n 'moduleDetection',\n 'noLib',\n 'reactNamespace',\n 'useDefineForClassFields',\n 'emitDecoratorMetadata',\n 'experimentalDecorators',\n /* Modules */\n 'baseUrl',\n 'rootDir',\n 'rootDirs',\n 'customConditions',\n 'module',\n 'moduleResolution',\n 'moduleSuffixes',\n 'noResolve',\n 'paths',\n 'resolveJsonModule',\n 'resolvePackageJsonExports',\n 'resolvePackageJsonImports',\n 'typeRoots',\n 'types',\n 'allowArbitraryExtensions',\n 'allowImportingTsExtensions',\n 'allowUmdGlobalAccess',\n /* JavaScript Support */\n 'allowJs',\n 'checkJs',\n 'maxNodeModuleJsDepth',\n /* Type Checking */\n 'strict',\n 'strictBindCallApply',\n 'strictFunctionTypes',\n 'strictNullChecks',\n 'strictPropertyInitialization',\n 'allowUnreachableCode',\n 'allowUnusedLabels',\n 'alwaysStrict',\n 'exactOptionalPropertyTypes',\n 'noFallthroughCasesInSwitch',\n 'noImplicitAny',\n 'noImplicitOverride',\n 'noImplicitReturns',\n 'noImplicitThis',\n 'noPropertyAccessFromIndexSignature',\n 'noUncheckedIndexedAccess',\n 'noUnusedLocals',\n 'noUnusedParameters',\n 'useUnknownInCatchVariables',\n /* Emit */\n 'declaration',\n 'declarationDir',\n 'declarationMap',\n 'downlevelIteration',\n 'emitBOM',\n 'emitDeclarationOnly',\n 'importHelpers',\n 'importsNotUsedAsValues',\n 'inlineSourceMap',\n 'inlineSources',\n 'mapRoot',\n 'newLine',\n 'noEmit',\n 'noEmitHelpers',\n 'noEmitOnError',\n 'outDir',\n 'outFile',\n 'preserveConstEnums',\n 'preserveValueImports',\n 'removeComments',\n 'sourceMap',\n 'sourceRoot',\n 'stripInternal',\n /* Interop Constraints */\n 'allowSyntheticDefaultImports',\n 'esModuleInterop',\n 'forceConsistentCasingInFileNames',\n 'isolatedModules',\n 'preserveSymlinks',\n 'verbatimModuleSyntax',\n /* Completeness */\n 'skipDefaultLibCheck',\n 'skipLibCheck',\n ],\n pathPattern: '^compilerOptions$',\n },\n ],\n },\n },\n ]\n}\n","import { GLOB_TESTS } from '../globs'\nimport { interopDefault } from '../utils'\nimport type { ConfigFn } from '../types'\n\nexport type TestConfig = ConfigFn\n\nexport const test: TestConfig = async (options) => {\n const { overrides = {} } = options\n\n const [pluginVitest, pluginNoOnlyTests] = await Promise.all([\n interopDefault(import('@vitest/eslint-plugin')),\n // @ts-expect-error missing types\n interopDefault(import('eslint-plugin-no-only-tests')),\n ] as const)\n\n return [\n {\n name: 'eslint/test/setup',\n plugins: {\n test: {\n ...pluginVitest,\n rules: {\n ...pluginVitest.rules,\n // extend `test/no-only-tests` rule\n ...pluginNoOnlyTests.rules,\n },\n },\n },\n },\n {\n name: 'eslint/test/rules',\n files: GLOB_TESTS,\n rules: {\n 'node/prefer-global/process': 'off',\n\n 'test/consistent-test-it': [\n 'error',\n { fn: 'it', withinDescribe: 'it' },\n ],\n 'test/no-identical-title': 'error',\n 'test/no-import-node-test': 'error',\n 'test/no-only-tests': 'error',\n 'test/prefer-hooks-in-order': 'error',\n 'test/prefer-lowercase-title': 'error',\n\n '@typescript-eslint/explicit-function-return-type': 'off',\n\n ...overrides,\n },\n },\n ]\n}\n","import { GLOB_TOML } from '..'\nimport { interopDefault } from '../utils'\nimport type { ConfigFn } from '..'\n\nexport type TomlConfig = ConfigFn\n\nexport const toml: TomlConfig = async (options) => {\n const { overrides = {} } = options\n\n const [pluginToml, parserToml] = await Promise.all([\n interopDefault(import('eslint-plugin-toml')),\n interopDefault(import('toml-eslint-parser')),\n ] as const)\n\n return [\n {\n name: 'eslint/toml/setup',\n plugins: {\n toml: pluginToml,\n },\n },\n {\n name: 'eslint/toml/rules',\n files: [GLOB_TOML],\n languageOptions: {\n parser: parserToml,\n },\n rules: {\n 'toml/comma-style': 'error',\n 'toml/keys-order': 'error',\n 'toml/no-space-dots': 'error',\n 'toml/no-unreadable-number-separator': 'error',\n 'toml/precision-of-fractional-seconds': 'error',\n 'toml/precision-of-integer': 'error',\n 'toml/tables-order': 'error',\n\n 'toml/vue-custom-block/no-parsing-error': 'error',\n\n 'toml/array-bracket-newline': 'error',\n 'toml/array-bracket-spacing': 'error',\n 'toml/array-element-newline': 'error',\n 'toml/indent': ['error', 2],\n 'toml/inline-table-curly-spacing': 'error',\n 'toml/key-spacing': 'error',\n 'toml/padding-line-between-pairs': 'error',\n 'toml/padding-line-between-tables': 'error',\n 'toml/quoted-keys': 'error',\n 'toml/spaced-comment': 'error',\n 'toml/table-bracket-spacing': 'error',\n\n ...overrides,\n },\n },\n ]\n}\n","import process from 'node:process'\nimport {\n GLOB_ASTRO_TS,\n GLOB_MARKDOWN,\n GLOB_SRC,\n GLOB_TS,\n GLOB_TSX,\n} from '../globs'\nimport { interopDefault } from '../utils'\nimport type {\n ConfigFn,\n ConfigItem,\n OptionsComponentExts,\n OptionsOverrides,\n OptionsTypeScriptParserOptions,\n OptionsTypeScriptWithTypes,\n} from '../types'\n\nexport type TypeScriptConfig = (\n options?: OptionsComponentExts &\n OptionsTypeScriptWithTypes &\n OptionsTypeScriptParserOptions &\n OptionsOverrides & {\n enableSolid?: boolean\n },\n) => ReturnType<ConfigFn>\n\nconst typeAwareRules: ConfigItem['rules'] = {\n 'dot-notation': 'off',\n 'no-implied-eval': 'off',\n '@typescript-eslint/await-thenable': 'error',\n '@typescript-eslint/dot-notation': ['error', { allowKeywords: true }],\n '@typescript-eslint/no-floating-promises': 'error',\n '@typescript-eslint/no-for-in-array': 'error',\n '@typescript-eslint/no-implied-eval': 'error',\n '@typescript-eslint/no-misused-promises': 'error',\n '@typescript-eslint/no-unnecessary-type-assertion': 'error',\n '@typescript-eslint/no-unsafe-argument': 'error',\n '@typescript-eslint/no-unsafe-assignment': 'error',\n '@typescript-eslint/no-unsafe-call': 'error',\n '@typescript-eslint/no-unsafe-member-access': 'error',\n '@typescript-eslint/no-unsafe-return': 'error',\n '@typescript-eslint/promise-function-async': 'error',\n '@typescript-eslint/restrict-plus-operands': 'error',\n '@typescript-eslint/restrict-template-expressions': 'error',\n '@typescript-eslint/return-await': ['error', 'in-try-catch'],\n '@typescript-eslint/strict-boolean-expressions': [\n 'error',\n { allowNullableBoolean: true, allowNullableObject: true },\n ],\n '@typescript-eslint/switch-exhaustiveness-check': 'error',\n '@typescript-eslint/unbound-method': 'error',\n}\n\nexport const typescript: TypeScriptConfig = async (options) => {\n const {\n overrides = {},\n componentExts = [],\n parserOptions = {},\n tsconfigPath,\n enableSolid = false,\n } = options ?? {}\n\n const isTypeAware = !!tsconfigPath\n\n const [pluginTs, parserTs] = await Promise.all([\n interopDefault(import('@typescript-eslint/eslint-plugin')),\n interopDefault(import('@typescript-eslint/parser')),\n ] as const)\n\n return [\n {\n // Install the plugins without globs, so they can be configured separately.\n name: 'eslint/typescript/setup',\n plugins: {\n '@typescript-eslint': pluginTs,\n ...(enableSolid\n ? {\n solid: await interopDefault(import('eslint-plugin-solid')),\n }\n : {}),\n },\n },\n {\n name: 'eslint/typescript/rules',\n files: [GLOB_SRC, ...componentExts.map((ext) => `**/*.${ext}`)],\n languageOptions: {\n parser: parserTs,\n parserOptions: {\n extraFileExtensions: componentExts.map((ext) => `.${ext}`),\n sourceType: 'module',\n\n ...(tsconfigPath\n ? {\n project: [tsconfigPath],\n tsconfigRootDir: process.cwd(),\n }\n : {}),\n ...(parserOptions as any),\n },\n },\n rules: {\n ...pluginTs.configs['eslint-recommended'].overrides![0].rules!,\n ...pluginTs.configs.strict.rules!,\n\n ...(enableSolid\n ? {\n 'solid/jsx-no-undef': ['error', { typescriptEnabled: true }],\n 'solid/no-unknown-namespaces': 'off',\n }\n : {}),\n 'no-dupe-class-members': 'off',\n 'no-redeclare': 'off',\n 'no-use-before-define': 'off',\n 'no-useless-constructor': 'off',\n '@typescript-eslint/ban-ts-comment': [\n 'error',\n { 'ts-expect-error': 'allow-with-description' },\n ],\n '@typescript-eslint/consistent-type-definitions': [\n 'error',\n 'interface',\n ],\n '@typescript-eslint/consistent-type-imports': [\n 'error',\n {\n disallowTypeAnnotations: false,\n fixStyle: 'separate-type-imports',\n prefer: 'type-imports',\n },\n ],\n\n // https://www.totaltypescript.com/method-shorthand-syntax-considered-harmful\n '@typescript-eslint/method-signature-style': ['error', 'property'],\n '@typescript-eslint/no-dupe-class-members': 'error',\n '@typescript-eslint/no-dynamic-delete': 'off',\n '@typescript-eslint/no-empty-object-type': [\n 'error',\n { allowInterfaces: 'always' },\n ],\n '@typescript-eslint/no-explicit-any': 'off',\n '@typescript-eslint/no-extraneous-class': 'off',\n '@typescript-eslint/no-import-type-side-effects': 'error',\n '@typescript-eslint/no-invalid-void-type': 'off',\n '@typescript-eslint/no-non-null-assertion': 'off',\n '@typescript-eslint/no-redeclare': ['error', { builtinGlobals: false }],\n '@typescript-eslint/no-require-imports': 'error',\n '@typescript-eslint/no-unused-expressions': [\n 'error',\n {\n allowShortCircuit: true,\n allowTaggedTemplates: true,\n allowTernary: true,\n },\n ],\n '@typescript-eslint/no-unused-vars': 'off',\n '@typescript-eslint/no-use-before-define': [\n 'error',\n { classes: false, functions: false, variables: true },\n ],\n '@typescript-eslint/no-useless-constructor': 'off',\n '@typescript-eslint/no-wrapper-object-types': 'error',\n '@typescript-eslint/triple-slash-reference': 'off',\n '@typescript-eslint/unified-signatures': 'off',\n\n ...overrides,\n },\n },\n ...((isTypeAware\n ? [\n {\n name: 'eslint/typescript/rules-type-aware',\n files: [GLOB_TS, GLOB_TSX],\n ignores: [`${GLOB_MARKDOWN}/**`, `${GLOB_ASTRO_TS}/**`],\n rules: {\n ...typeAwareRules,\n },\n },\n ]\n : []) satisfies ConfigItem[]),\n {\n name: 'eslint/typescript/dts-overrides',\n files: ['**/*.d.ts'],\n rules: {\n 'eslint-comments/no-unlimited-disable': 'off',\n 'import/no-duplicates': 'off',\n 'no-restricted-syntax': 'off',\n 'unused-imports/no-unused-vars': 'off',\n },\n },\n {\n name: 'eslint/typescript/disables/test',\n files: ['**/*.{test,spec}.ts?(x)'],\n rules: {\n 'no-unused-expressions': 'off',\n },\n },\n {\n name: 'eslint/typescript/disables/cjs',\n files: ['**/*.js', '**/*.cjs'],\n rules: {\n '@typescript-eslint/no-require-imports': 'off',\n '@typescript-eslint/no-var-requires': 'off',\n },\n },\n ]\n}\n","import { interopDefault } from '../utils'\nimport type { ConfigItem } from '../types'\n\nexport async function unicorn(): Promise<ConfigItem[]> {\n const pluginUnicorn = await interopDefault(import('eslint-plugin-unicorn'))\n\n return [\n {\n name: 'eslint/unicorn/rules',\n plugins: {\n unicorn: pluginUnicorn,\n },\n rules: {\n 'unicorn/consistent-empty-array-spread': 'error',\n 'unicorn/escape-case': 'error',\n 'unicorn/new-for-builtins': 'error',\n // Pass error message when throwing errors\n 'unicorn/error-message': 'error',\n // Uppercase regex escapes\n 'unicorn/consistent-function-scoping': [\n 'error',\n { checkArrowFunctions: false },\n ],\n 'unicorn/no-instanceof-builtins': 'error',\n // Ban `new Array` as `Array` constructor's params are ambiguous\n 'unicorn/no-new-array': 'error',\n // Prevent deprecated `new Buffer()`\n 'unicorn/no-new-buffer': 'error',\n // Lowercase number formatting for octal, hex, binary (0x1'error' instead of 0X1'error')\n 'unicorn/number-literal-case': 'error',\n // textContent instead of innerText\n 'unicorn/prefer-dom-node-text-content': 'error',\n // includes over indexOf when checking for existence\n 'unicorn/prefer-includes': 'error',\n // Prefer using the node: protocol\n 'unicorn/prefer-node-protocol': 'error',\n // Prefer using number properties like `Number.isNaN` rather than `isNaN`\n 'unicorn/prefer-number-properties': 'error',\n // String methods startsWith/endsWith instead of more complicated stuff\n 'unicorn/prefer-string-starts-ends-with': 'error',\n // Enforce throwing type error when throwing error while checking typeof\n 'unicorn/prefer-type-error': 'error',\n // Use new when throwing error\n 'unicorn/throw-new-error': 'error',\n },\n },\n ]\n}\n","import { GLOB_VUE } from '../globs'\nimport { interopDefault } from '../utils'\nimport type { ConfigFn, OptionsHasTypeScript, OptionsOverrides } from '../types'\n\nexport type VueConfig = (\n options: OptionsHasTypeScript & OptionsOverrides,\n) => ReturnType<ConfigFn>\n\nexport const vue: VueConfig = async (options = {}) => {\n const { overrides = {}, typescript: isTypescript } = options\n\n const [pluginVue, parserVue] = await Promise.all([\n interopDefault(import('eslint-plugin-vue')),\n interopDefault(import('vue-eslint-parser')),\n ] as const)\n\n return [\n {\n name: 'eslint/vue/setup',\n plugins: {\n vue: pluginVue,\n },\n },\n {\n name: 'eslint/vue/rules',\n files: [GLOB_VUE],\n languageOptions: {\n parser: parserVue,\n parserOptions: {\n ecmaFeatures: {\n jsx: true,\n },\n extraFileExtensions: ['.vue'],\n parser: isTypescript\n ? ((await interopDefault(\n import('@typescript-eslint/parser'),\n )) as any)\n : null,\n sourceType: 'module',\n },\n },\n processor: pluginVue.processors['.vue'],\n rules: {\n ...pluginVue.configs.base.rules,\n\n ...(pluginVue.configs['flat/essential']\n .map((c) => c.rules)\n .reduce((acc, c) => ({ ...acc, ...c }), {}) as any),\n ...(pluginVue.configs['flat/strongly-recommended']\n .map((c) => c.rules)\n .reduce((acc, c) => ({ ...acc, ...c }), {}) as any),\n ...(pluginVue.configs['flat/recommended']\n .map((c) => c.rules)\n .reduce((acc, c) => ({ ...acc, ...c }), {}) as any),\n\n 'node/prefer-global/process': 'off',\n\n 'vue/block-order': [\n 'error',\n {\n order: ['script', 'template', 'style'],\n },\n ],\n 'vue/component-name-in-template-casing': [\n 'error',\n 'PascalCase',\n {\n registeredComponentsOnly: false,\n },\n ],\n 'vue/component-options-name-casing': ['error', 'PascalCase'],\n 'vue/custom-event-name-casing': ['error', 'camelCase'],\n 'vue/define-macros-order': [\n 'error',\n {\n order: [\n 'defineOptions',\n 'defineProps',\n 'defineEmits',\n 'defineSlots',\n ],\n },\n ],\n 'vue/dot-location': ['error', 'property'],\n 'vue/dot-notation': ['error', { allowKeywords: true }],\n 'vue/eqeqeq': ['error', 'smart'],\n 'vue/html-indent': ['error', 2],\n 'vue/html-quotes': ['error', 'double'],\n 'vue/max-attributes-per-line': 'off',\n 'vue/multi-word-component-names': 'off',\n 'vue/no-dupe-keys': 'off',\n 'vue/no-empty-pattern': 'error',\n 'vue/no-irregular-whitespace': 'error',\n 'vue/no-loss-of-precision': 'error',\n 'vue/no-restricted-syntax': [\n 'error',\n 'DebuggerStatement',\n 'LabeledStatement',\n 'WithStatement',\n ],\n 'vue/no-restricted-v-bind': ['error', '/^v-/'],\n 'vue/no-setup-props-reactivity-loss': 'off',\n 'vue/no-sparse-arrays': 'error',\n 'vue/no-unused-refs': 'error',\n 'vue/no-useless-v-bind': 'error',\n 'vue/no-v-html': 'off',\n 'vue/object-shorthand': [\n 'error',\n 'always',\n {\n avoidQuotes: true,\n ignoreConstructors: false,\n },\n ],\n 'vue/prefer-separate-static-class': 'error',\n 'vue/prefer-template': 'error',\n 'vue/require-default-prop': 'off',\n 'vue/require-prop-types': 'off',\n 'vue/space-infix-ops': 'error',\n 'vue/space-unary-ops': ['error', { nonwords: false, words: true }],\n\n 'vue/array-bracket-spacing': ['error', 'never'],\n 'vue/arrow-spacing': ['error', { after: true, before: true }],\n 'vue/block-spacing': ['error', 'always'],\n 'vue/block-tag-newline': [\n 'error',\n {\n multiline: 'always',\n singleline: 'always',\n },\n ],\n 'vue/brace-style': ['error', 'stroustrup', { allowSingleLine: true }],\n 'vue/comma-dangle': ['error', 'always-multiline'],\n 'vue/comma-spacing': ['error', { after: true, before: false }],\n 'vue/comma-style': ['error', 'last'],\n 'vue/html-comment-content-spacing': [\n 'error',\n 'always',\n {\n exceptions: ['-'],\n },\n ],\n 'vue/key-spacing': ['error', { afterColon: true, beforeColon: false }],\n 'vue/keyword-spacing': ['error', { after: true, before: true }],\n 'vue/object-curly-newline': 'off',\n 'vue/object-curly-spacing': ['error', 'always'],\n 'vue/object-property-newline': [\n 'error',\n { allowMultiplePropertiesPerLine: true },\n ],\n 'vue/operator-linebreak': ['error', 'before'],\n 'vue/padding-line-between-blocks': ['error', 'always'],\n 'vue/quote-props': ['error', 'consistent-as-needed'],\n 'vue/space-in-parens': ['error', 'never'],\n 'vue/template-curly-spacing': 'error',\n\n ...overrides,\n },\n },\n ]\n}\n","import { GLOB_YAML } from '../globs'\nimport { interopDefault } from '../utils'\nimport type { ConfigFn, OptionsOverrides } from '../types'\n\nexport type YmlConfig = (options: OptionsOverrides) => ReturnType<ConfigFn>\n\nexport const yml: YmlConfig = async (options) => {\n const { overrides = {} } = options\n\n const [pluginYml, parserYml] = await Promise.all([\n interopDefault(import('eslint-plugin-yml')),\n interopDefault(import('yaml-eslint-parser')),\n ] as const)\n\n return [\n {\n name: 'eslint/yaml/setup',\n plugins: {\n yml: pluginYml,\n },\n },\n {\n name: 'eslint/yaml/rules',\n files: [GLOB_YAML],\n languageOptions: {\n parser: parserYml,\n },\n rules: {\n // recommended rules\n 'yml/no-empty-document': 'error',\n 'yml/no-empty-key': 'error',\n 'yml/no-empty-mapping-value': 'error',\n 'yml/no-empty-sequence-entry': 'error',\n 'yml/no-irregular-whitespace': 'error',\n 'yml/no-tab-indent': 'error',\n 'yml/vue-custom-block/no-parsing-error': 'error',\n\n // standard rules\n 'yml/block-mapping-colon-indicator-newline': 'error',\n 'yml/block-mapping-question-indicator-newline': 'error',\n 'yml/block-mapping': 'error',\n 'yml/block-sequence-hyphen-indicator-newline': 'error',\n 'yml/block-sequence': 'error',\n 'yml/flow-mapping-curly-newline': 'error',\n 'yml/flow-mapping-curly-spacing': 'error',\n 'yml/flow-sequence-bracket-newline': 'error',\n 'yml/flow-sequence-bracket-spacing': 'error',\n 'yml/indent': 'error',\n 'yml/key-spacing': 'error',\n 'yml/no-multiple-empty-lines': 'error',\n 'yml/no-trailing-zeros': 'error',\n 'yml/plain-scalar': 'error',\n 'yml/quotes': 'error',\n 'yml/spaced-comment': 'error',\n\n ...overrides,\n },\n },\n ]\n}\n","import { GLOB_JSX, GLOB_TS, GLOB_TSX } from '../globs'\nimport { combine, interopDefault } from '../utils'\nimport type {\n ConfigFn,\n ConfigItem,\n OptionsOverrides,\n OptionsTypeScriptWithTypes,\n} from '../types'\n\nexport type ReactConfig = (\n options: {\n next?: boolean\n compiler?: boolean\n } & OptionsOverrides &\n OptionsTypeScriptWithTypes,\n) => ReturnType<ConfigFn>\n\nasync function next(): Promise<ConfigItem[]> {\n const pluginNext = await interopDefault(import('@next/eslint-plugin-next'))\n\n return [\n {\n name: 'eslint/next/setup',\n plugins: {\n '@next/next': pluginNext,\n },\n },\n {\n name: 'eslint/next/rules',\n files: [GLOB_TSX, GLOB_JSX],\n languageOptions: {\n parserOptions: {\n sourceType: 'module',\n ecmaFeatures: {\n jsx: true,\n },\n },\n },\n settings: {\n react: {\n version: 'detect',\n },\n },\n rules: {\n ...pluginNext.configs.recommended.rules,\n // ...pluginNext.configs['core-web-vitals'].rules,\n\n 'react-refresh/only-export-components': [\n 'warn',\n {\n allowExportNames: [\n // https://nextjs.org/docs/app/api-reference/file-conventions/route-segment-config\n 'dynamic',\n 'dynamicParams',\n 'revalidate',\n 'fetchCache',\n 'runtime',\n 'preferredRegion',\n 'maxDuration',\n // https://nextjs.org/docs/app/api-reference/functions/generate-static-params\n 'generateStaticParams',\n // https://nextjs.org/docs/app/api-reference/functions/generate-metadata\n 'metadata',\n 'generateMetadata',\n // https://nextjs.org/docs/app/api-reference/functions/generate-viewport\n 'viewport',\n 'generateViewport',\n // https://nextjs.org/docs/app/api-reference/functions/generate-image-metadata\n 'generateImageMetadata',\n // https://nextjs.org/docs/app/api-reference/functions/generate-sitemaps\n 'generateSitemaps',\n ],\n },\n ],\n },\n },\n ]\n}\n\nexport const react: ReactConfig = async (options): Promise<ConfigItem[]> => {\n const {\n next: enableNext = false,\n compiler: enableCompiler = false,\n overrides = {},\n tsconfigPath,\n } = options\n\n const isTypeAware = !!tsconfigPath\n\n const [pluginsReact, pluginReactHooks, pluginReactRefresh] =\n await Promise.all([\n interopDefault(import('@eslint-react/eslint-plugin')),\n interopDefault(import('eslint-plugin-react-hooks')),\n interopDefault(import('eslint-plugin-react-refresh')),\n ] as const)\n\n const plugins = (pluginsReact.configs.all as any).plugins\n\n const {\n '@eslint-react': pluginReactX,\n '@eslint-react/dom': pluginReactDom,\n '@eslint-react/hooks-extra': pluginReactHooksExtra,\n '@eslint-react/naming-convention': pluginReactNamingConvention,\n '@eslint-react/web-api': pluginReactWebApi,\n } = plugins\n\n const typeAwareRules: ConfigItem['rules'] = {\n 'react/no-leaked-conditional-rendering': 'warn',\n 'react/no-implicit-key': 'error',\n }\n\n const _react: ConfigItem[] = [\n {\n name: 'eslint/react/setup',\n plugins: {\n 'react': pluginReactX,\n 'react-dom': pluginReactDom,\n 'react-hooks-extra': pluginReactHooksExtra,\n 'react-naming-convention': pluginReactNamingConvention,\n 'react-web-api': pluginReactWebApi,\n\n 'react-hooks': pluginReactHooks,\n 'react-refresh': pluginReactRefresh,\n ...(enableCompiler\n ? {\n 'react-compiler': await interopDefault(\n // @ts-expect-error missing types\n import('eslint-plugin-react-compiler'),\n ),\n }\n : {}),\n },\n },\n {\n name: 'eslint/react/rules',\n files: [GLOB_TSX, GLOB_JSX],\n languageOptions: {\n sourceType: 'module',\n parserOptions: {\n ecmaFeatures: {\n jsx: true,\n },\n },\n },\n settings: {\n react: {\n version: 'detect',\n },\n },\n rules: {\n // recommended rules from eslint-plugin-react-x https://eslint-react.xyz/docs/rules/overview#core-rules\n 'react/jsx-key-before-spread': 'warn',\n 'react/jsx-no-comment-textnodes': 'warn',\n 'react/jsx-no-duplicate-props': 'warn',\n 'react/jsx-uses-react': 'warn',\n 'react/jsx-uses-vars': 'warn',\n 'react/no-access-state-in-setstate': 'error',\n 'react/no-array-index-key': 'warn',\n 'react/no-children-count': 'warn',\n 'react/no-children-for-each': 'warn',\n 'react/no-children-map': 'warn',\n 'react/no-children-only': 'warn',\n 'react/no-children-to-array': 'warn',\n 'react/no-clone-element': 'warn',\n 'react/no-component-will-mount': 'error',\n 'react/no-component-will-receive-props': 'error',\n 'react/no-component-will-update': 'error',\n 'react/no-context-provider': 'warn',\n 'react/no-create-ref': 'error',\n 'react/no-default-props': 'error',\n 'react/no-direct-mutation-state': 'error',\n 'react/no-duplicate-key': 'error',\n 'react/no-forward-ref': 'warn',\n 'react/no-missing-key': 'error',\n 'react/no-nested-component-definitions': 'error',\n 'react/no-nested-lazy-component-declarations': 'error',\n 'react/no-prop-types': 'error',\n 'react/no-redundant-should-component-update': 'error',\n 'react/no-set-state-in-component-did-mount': 'warn',\n 'react/no-set-state-in-component-did-update': 'warn',\n 'react/no-set-state-in-component-will-update': 'warn',\n 'react/no-string-refs': 'error',\n 'react/no-unnecessary-use-prefix': 'warn',\n 'react/no-unsafe-component-will-mount': 'warn',\n 'react/no-unsafe-component-will-receive-props': 'warn',\n 'react/no-unsafe-component-will-update': 'warn',\n 'react/no-use-context': 'warn',\n 'react/no-useless-forward-ref': 'warn',\n 'react/prefer-use-state-lazy-initialization': 'warn',\n 'react/prefer-namespace-import': 'error',\n\n // recommended rules from eslint-plugin-react-dom https://eslint-react.xyz/docs/rules/overview#dom-rules\n 'react-dom/no-dangerously-set-innerhtml': 'warn',\n 'react-dom/no-dangerously-set-innerhtml-with-children': 'error',\n 'react-dom/no-find-dom-node': 'error',\n 'react-dom/no-flush-sync': 'error',\n 'react-dom/no-hydrate': 'error',\n 'react-dom/no-namespace': 'error',\n 'react-dom/no-render': 'error',\n 'react-dom/no-render-return-value': 'error',\n 'react-dom/no-script-url': 'warn',\n 'react-dom/no-unsafe-iframe-sandbox': 'warn',\n 'react-dom/no-use-form-state': 'error',\n 'react-dom/no-void-elements-with-children': 'error',\n\n // recommended rules eslint-plugin-react-hooks https://github.com/facebook/react/blob/main/packages/eslint-plugin-react-hooks/README.md\n // Core hooks rules\n 'react-hooks/rules-of-hooks': 'error',\n 'react-hooks/exhaustive-deps': 'warn',\n\n // recommended rules from eslint-plugin-react-hooks-extra https://eslint-react.xyz/docs/rules/overview#hooks-extra-rules\n 'react-hooks-extra/no-direct-set-state-in-use-effect': 'warn',\n\n // recommended rules from eslint-plugin-react-web-api https://eslint-react.xyz/docs/rules/overview#web-api-rules\n 'react-web-api/no-leaked-event-listener': 'warn',\n 'react-web-api/no-leaked-interval': 'warn',\n 'react-web-api/no-leaked-resize-observer': 'warn',\n 'react-web-api/no-leaked-timeout': 'warn',\n\n // React Refresh\n 'react-refresh/only-export-components': 'warn',\n\n // React Compiler\n ...(enableCompiler\n ? {\n 'react-compiler/react-compiler': 'error',\n 'react-hooks/config': 'error',\n 'react-hooks/error-boundaries': 'error',\n 'react-hooks/component-hook-factories': 'error',\n 'react-hooks/gating': 'error',\n 'react-hooks/globals': 'error',\n 'react-hooks/immutability': 'error',\n 'react-hooks/preserve-manual-memoization': 'error',\n 'react-hooks/purity': 'error',\n 'react-hooks/refs': 'error',\n 'react-hooks/set-state-in-effect': 'error',\n 'react-hooks/set-state-in-render': 'error',\n 'react-hooks/static-components': 'error',\n 'react-hooks/unsupported-syntax': 'warn',\n 'react-hooks/use-memo': 'error',\n 'react-hooks/incompatible-library': 'warn',\n }\n : {}),\n\n 'jsx-quotes': ['error', 'prefer-double'],\n 'react/react-in-jsx-scope': 'off',\n 'react/jsx-indent': [1, 2],\n 'react/jsx-indent-props': [1, 2],\n 'react/jsx-closing-bracket-location': [\n 1,\n { selfClosing: 'tag-aligned', nonEmpty: 'tag-aligned' },\n ],\n\n ...overrides,\n },\n },\n ...(isTypeAware\n ? [\n {\n name: 'eslint/react/type-aware-rules',\n files: [GLOB_TS, GLOB_TSX],\n rules: {\n ...typeAwareRules,\n },\n },\n ]\n : []),\n ]\n\n return combine(_react, enableNext ? next() : [])\n}\n","import { interopDefault } from '../utils'\nimport type { ConfigFn, ConfigItem, OptionsOverrides } from '../types'\n\nexport type TailwindcssConfig = (\n options: {\n settings?: {\n entryPoint?: string\n tailwindConfig?: string\n tsconfig?: string\n attributes?: string[]\n callees?: string[]\n variables?: string[]\n }\n } & OptionsOverrides,\n) => ReturnType<ConfigFn>\n\nexport const tailwindcss: TailwindcssConfig = async (\n options,\n): Promise<ConfigItem[]> => {\n const { overrides = {} } = options\n const pluginBetterTailwindcss = await interopDefault(\n import('eslint-plugin-better-tailwindcss'),\n )\n\n return [\n {\n name: 'eslint/better-tailwindcss/rules',\n settings: {\n 'better-tailwindcss': {\n entryPoint: 'src/global.css',\n ...options.settings,\n },\n },\n plugins: {\n 'better-tailwindcss': pluginBetterTailwindcss,\n },\n rules: {\n 'better-tailwindcss/no-unknown-classes': 'warn',\n 'better-tailwindcss/no-conflicting-classes': 'warn',\n 'better-tailwindcss/no-unnecessary-whitespace': 'warn',\n 'better-tailwindcss/no-duplicate-classes': 'warn',\n 'better-tailwindcss/enforce-consistent-class-order': 'warn',\n\n ...overrides,\n },\n },\n ]\n}\n","import {\n comments,\n ignores,\n imports,\n javascript,\n jsdoc,\n jsonc,\n markdown,\n node,\n perfectionist,\n prettier,\n sortPackageJson,\n sortTsconfig,\n test,\n toml,\n typescript,\n unicorn,\n vue,\n yml,\n} from '~/configs'\nimport { react } from '~/configs/react'\nimport { tailwindcss } from '~/configs/tailwindcss'\nimport { combine, getConfigOptions } from '~/utils'\nimport type { Awaitable, ConfigItem, OptionsConfig } from '~/types'\n\n/**\n * Construct an array of ESLint flat config items.\n */\nexport function defineConfig(\n options: OptionsConfig = {},\n ...userConfigs: ConfigItem[]\n) {\n const {\n ignores: enableIgnores = true,\n vue: enableVue,\n react: enableReact,\n solid: enableSolid,\n typescript: enableTypeScript,\n tailwindcss: enableTailwindcss,\n componentExts = [],\n } = options\n\n const configs: Awaitable<ConfigItem | ConfigItem[]>[] = []\n const tsconfigPath =\n typeof enableTypeScript !== 'boolean'\n ? enableTypeScript?.tsconfigPath\n : undefined\n\n // Base configs\n configs.push(\n ignores(getConfigOptions(enableIgnores)),\n javascript(options.javascript ?? {}),\n comments(),\n node(),\n jsdoc(),\n imports(),\n unicorn(),\n\n perfectionist(),\n )\n\n if (enableVue) componentExts.push('vue')\n\n if (enableTypeScript) {\n configs.push(\n typescript({\n ...(typeof enableTypeScript !== 'boolean' ? enableTypeScript : {}),\n enableSolid,\n componentExts,\n }),\n )\n }\n\n if (options.test ?? true) {\n configs.push(test(getConfigOptions(options.test)))\n }\n\n if (enableVue) {\n configs.push(\n vue({\n ...getConfigOptions(options.vue),\n typescript: !!enableTypeScript,\n }),\n )\n }\n\n if (enableReact) {\n configs.push(\n react({\n ...getConfigOptions(enableReact),\n tsconfigPath,\n }),\n )\n }\n\n if (options.jsonc ?? true) {\n configs.push(\n jsonc(getConfigOptions(options.jsonc)),\n sortPackageJson(),\n sortTsconfig(),\n )\n }\n\n if (options.yml ?? true) {\n configs.push(yml(getConfigOptions(options.yml)))\n }\n\n if (options.toml ?? true) {\n configs.push(toml(getConfigOptions(options.toml)))\n }\n\n if (options.markdown ?? true) {\n configs.push(\n markdown({\n ...getConfigOptions(options.markdown),\n componentExts,\n }),\n )\n }\n\n if (enableTailwindcss !== 'prettier' && enableTailwindcss) {\n configs.push(tailwindcss(getConfigOptions(enableTailwindcss)))\n }\n\n if (options.prettier ?? true) {\n configs.push(\n prettier({\n ...getConfigOptions(options.prettier),\n tailwindcss: enableTailwindcss === 'prettier',\n }),\n )\n }\n\n const merged = combine(...configs, ...userConfigs)\n\n return merged\n}\n","import { defineConfig } from './factory'\n\nexport * from './configs'\nexport { defineConfig } from './factory'\nexport * from './factory'\nexport * from './globs'\nexport * from './types'\nexport * from './utils'\n\nexport default defineConfig\n"],"mappings":"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;IACd,CACF;GACD,mBAAmB;IACjB;IACA;KACE,OAAO;MACL;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACD;KACD,aAAa;KACd;IACD;KACE,OAAO,EAAE,MAAM,OAAO;KACtB,aACE;KACH;IACD;KACE,OAAO,EAAE,MAAM,OAAO;KACtB,aAAa;KACd;IACD;KACE,OAAO;MAAC;MAAS;MAAU;MAAW;MAAU;KAChD,aAAa;KACd;IACF;GACF;EACF,CACF;;;;;;;AAQH,eAAsB,eAAsC;AAC1D,QAAO,CACL;EACE,MAAM;EACN,OAAO,CAAC,oBAAoB,qBAAqB;EACjD,OAAO,EACL,mBAAmB;GACjB;GACA;IACE,OAAO;KACL;KACA;KACA;KACA;KACA;KACA;KACD;IACD,aAAa;IACd;GACD;IACE,OAAO;KAEL;KACA;KACA;KACA;KACA;KACA;KAEA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KAEA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KAEA;KACA;KACA;KAEA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KAEA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KAEA;KACA;KACA;KACA;KACA;KACA;KAEA;KACA;KACD;IACD,aAAa;IACd;GACF,EACF;EACF,CACF;;;;;ACnNH,MAAa,OAAmB,OAAO,YAAY;CACjD,MAAM,EAAE,YAAY,EAAE,KAAK;CAE3B,MAAM,CAAC,cAAc,qBA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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@debbl/eslint-config",
3
3
  "type": "module",
4
- "version": "3.15.1",
4
+ "version": "3.16.0",
5
5
  "description": "Brendan Dash's ESLint config",
6
6
  "author": "Brendan Dash <me@aiwan.run> (https://github.com/Debbl/)",
7
7
  "license": "MIT",
@@ -31,49 +31,49 @@
31
31
  "@eslint-react/eslint-plugin": "^2.9.4",
32
32
  "@eslint/markdown": "^7.5.1",
33
33
  "@next/eslint-plugin-next": "^16.1.6",
34
- "@typescript-eslint/eslint-plugin": "^8.54.0",
35
- "@typescript-eslint/parser": "^8.54.0",
36
- "@vitest/eslint-plugin": "^1.6.6",
37
- "eslint-config-flat-gitignore": "^2.1.0",
38
- "eslint-plugin-better-tailwindcss": "^4.1.1",
34
+ "@typescript-eslint/eslint-plugin": "^8.56.1",
35
+ "@typescript-eslint/parser": "^8.56.1",
36
+ "@vitest/eslint-plugin": "^1.6.9",
37
+ "eslint-config-flat-gitignore": "^2.2.1",
38
+ "eslint-merge-processors": "^2.0.0",
39
+ "eslint-plugin-better-tailwindcss": "^4.3.0",
39
40
  "eslint-plugin-import-x": "^4.16.1",
40
- "eslint-plugin-jsdoc": "^62.5.0",
41
- "eslint-plugin-jsonc": "^2.21.0",
42
- "eslint-plugin-n": "^17.23.2",
41
+ "eslint-plugin-jsdoc": "^62.7.1",
42
+ "eslint-plugin-jsonc": "^3.1.1",
43
+ "eslint-plugin-n": "^17.24.0",
43
44
  "eslint-plugin-no-only-tests": "^3.3.0",
44
- "eslint-plugin-perfectionist": "^5.4.0",
45
+ "eslint-plugin-perfectionist": "^5.6.0",
45
46
  "eslint-plugin-prettier": "^5.5.5",
46
47
  "eslint-plugin-react-compiler": "latest",
47
48
  "eslint-plugin-react-hooks": "^7.0.1",
48
- "eslint-plugin-react-refresh": "^0.5.0",
49
+ "eslint-plugin-react-refresh": "^0.5.2",
49
50
  "eslint-plugin-solid": "^0.14.5",
50
- "eslint-plugin-toml": "^1.0.3",
51
+ "eslint-plugin-toml": "^1.3.0",
51
52
  "eslint-plugin-unicorn": "^62.0.0",
52
- "eslint-plugin-unused-imports": "^4.3.0",
53
- "eslint-plugin-vue": "^10.7.0",
54
- "eslint-plugin-yml": "^3.0.0",
53
+ "eslint-plugin-unused-imports": "^4.4.1",
54
+ "eslint-plugin-vue": "^10.8.0",
55
+ "eslint-plugin-yml": "^3.3.0",
55
56
  "globals": "^17.3.0",
56
- "jsonc-eslint-parser": "^2.4.2",
57
57
  "prettier": "^3.8.1",
58
58
  "prettier-plugin-tailwindcss": "^0.7.2",
59
59
  "toml-eslint-parser": "^1.0.3",
60
- "vue-eslint-parser": "^10.2.0",
60
+ "vue-eslint-parser": "^10.4.0",
61
61
  "yaml-eslint-parser": "^2.0.0"
62
62
  },
63
63
  "devDependencies": {
64
64
  "@eslint/config-inspector": "^1.4.2",
65
65
  "@types/eslint": "^9.6.1",
66
66
  "@types/fs-extra": "^11.0.4",
67
- "@types/node": "^25.2.0",
68
- "@types/react": "^19.2.10",
69
- "bumpp": "^10.4.0",
70
- "eslint": "^9.39.2",
67
+ "@types/node": "^25.3.1",
68
+ "@types/react": "^19.2.14",
69
+ "bumpp": "^10.4.1",
70
+ "eslint": "^9.39.3",
71
71
  "execa": "^9.6.1",
72
72
  "fast-glob": "^3.3.3",
73
73
  "fs-extra": "^11.3.3",
74
74
  "react": "^19.2.4",
75
75
  "sucrase": "^3.35.1",
76
- "tsdown": "^0.20.1",
76
+ "tsdown": "^0.20.3",
77
77
  "typescript": "^5.9.3",
78
78
  "vitest": "^4.0.18"
79
79
  },